Function Ada95:伯努利数的递归函数
我试图编写一个函数,计算正贝努埃尔数的第N个值。我想用这个递归公式: 到目前为止,我所尝试的:Function Ada95:伯努利数的递归函数,function,recursion,ada,bernoulli-numbers,Function,Recursion,Ada,Bernoulli Numbers,我试图编写一个函数,计算正贝努埃尔数的第N个值。我想用这个递归公式: 到目前为止,我所尝试的: function Get_B(N : in Integer) return Float is X,Bn,Bk:Float; begin if N = 0 then return 1.0; else Bn:=0.0; for K in 0..(N-1) loop Bk:=Get_B(K);
function Get_B(N : in Integer) return Float is
X,Bn,Bk:Float;
begin
if N = 0 then
return 1.0;
else
Bn:=0.0;
for K in 0..(N-1) loop
Bk:=Get_B(K);
X:=1.0-Float(F(N))/(Float(F(K))*Float(F(N-K))) *
Bk/(Float(N)-Float(K)+1.0);
Bn:=Bn+X;
end loop;
return Bn;
end if;
end Get_B;
其中F是阶乘函数(即F(N)表示N!)。
我觉得这个循环有点问题,但我不知道是什么
我不能发布图片,但这里有一个链接到等式(底部):
1.0-应该在循环之外:
function Get_B(N : in Integer)
return Float is
X,Bn,Bk:Float;
begin
if N = 0 then
return 1.0;
else
Bn:=0.0;
for K in 0..(N-1) loop
Bk:=Get_B(K);
X:=Float(F(N))/(Float(F(K))*Float(F(N-K))) *
Bk/(Float(N)-Float(K)+1.0);
Bn:=Bn+X;
end loop;
return 1.0 - Bn;
end if;
end Get_B;
为什么你认为循环有问题?我在函数中输入的每个N都有一个值,但是只有N=0,N=1和N=6给出了正确的答案。其他人给出了错误的答案。我在我如何写这个等式的过程中找不到错误,所以我想这可能是问题所在的循环。在维基百科上快速搜索一下,发现
1.0-
部分应该在循环之外哇,谢谢Egilhh,这真的做到了!你在哪里找到这些信息的?@Ludd,搜索“递归公式”顺便说一句,当你的输入是正数(包括0)时,你应该告诉编译器:函数Get_B(N:in Natural)
。如果阶乘函数首先返回Float,那么表达式的可读性就会大大提高:X:=F(N)/(F(K)*F(N-K))*Bk/Float(N-K+1)代码>谢谢,我会改的!