Function Ada95:伯努利数的递归函数

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);

我试图编写一个函数,计算正贝努埃尔数的第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!)。 我觉得这个循环有点问题,但我不知道是什么

我不能发布图片,但这里有一个链接到等式(底部):

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)谢谢,我会改的!