Ada95: рекурсивная функция для чисел Бернулли

Я пытаюсь закодировать функцию, которая вычисляет 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

1 ответ

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;
Другие вопросы по тегам