【发布时间】:2017-10-24 13:18:30
【问题描述】:
我正在尝试编写一个函数来计算正伯努耶数的第 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);
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!)。 我认为循环有问题,但我不知道它是什么。
我无法发布图片,但这里是等式的链接(底部): https://wikimedia.org/api/rest_v1/media/math/render/svg/2571d0a7024741c0a0ad0eb32cc9333f6024c528
【问题讨论】:
-
为什么你认为循环有问题?
-
我得到每个 N i 放入函数的值,但只有 N=0 、 N=1 和 N=6 给出了正确的答案。其他人给出了错误的答案。我在编写方程式时找不到错误,所以我认为它可能是问题所在的循环。
-
在维基百科上的快速搜索表明
1.0-部分应该在循环之外 -
哇,感谢 Egilhh,它确实做到了!你在哪里找到这些信息的?
-
@Ludd, en.wikipedia.org/wiki/Bernoulli_number 搜索“递归公式”
标签: function recursion ada bernoulli-numbers