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;