|
|
写了个递归函数验证N=10:
declare
type tnum is table of number index by varchar2(40);
v_res tnum;
function f(p_take number,p_give number)
return number
as
v_ret number;
v_idx varchar2(20);
x number;
begin
v_idx :=p_take||','||p_give;
if v_res.exists(v_idx) then
return v_res(v_idx);
end if;
if p_take=0 then
v_ret := power(2,p_give);
elsif p_give=0 then
v_ret := 1;
else
-- (1+x)*f(p_take,p_give-1) = (1-x)*f(p_take-1,p_give)
x := (f(p_take-1,p_give)-f(p_take,p_give-1))/(f(p_take-1,p_give)+f(p_take,p_give-1));
v_ret := (1+x)*f(p_take,p_give-1);
end if;
v_res(v_idx) := v_ret;
return v_ret;
end f;
begin
dbms_output.put_line(f(10,10));
end;
/
1.70039535177875867973911323147376375541
PL/SQL procedure successfully completed.
|
|