2011-08-02 2 views
1

だから私はこのコードを持っている:単純なループを再帰を使用するように変換するにはどうすればよいですか?

WRITELN(“input which member of series”) 
READ(n) 
p ← 2 
prev1 ← 1 
prev2 ← 1 
WHILE p IS LESS THAN n DO 
BEGIN 
term ← prev1 + prev2 
prev2 ← prev1 
prev1 ← term 
p ← p + 1 
END 
WRITELN (“term =”, term) 

誰かがそれが(PHPやPascalのいずれかで)再帰的に動作しますので、私はコードを書き換える助けることができます。

EDIT

N = 4

私はPASCALを使用しています。問題は、再帰的なコードは2

を返しながら、これは私の再帰コードで、非再帰的なコードは3を返し、次のとおりです。

program Fibfun; 

VAR 
n,prev1,prev2,term : Integer; 

FUNCTION sw(p:integer):integer;Begin 
    if p < n then 
     Begin 
     term:= prev1 + prev2; 
     prev2:=prev1; 
     prev1:=term; 
     End 
    else 
    Begin 
    p:= 1 + sw(p); 
    End; 
sw:=term; 
End; 

Begin 
prev1:=1; 
prev2:=1; 
term:=1; 
writeln('Input number: '); 
readln(n); 

writeln('term ', sw(2)); 

readln; 
End. 
+0

はこの宿題ですか? – duedl0r

+1

あなたは完全に理解するためにどのような再帰があるのか​​を理解する必要があります。再帰が完全に理解できることを読むべきです...再帰が完全に理解できることを読む必要があります... http://www.google.com/search? sclient = psy&hl = en&source = hp&q = recursion&pbx = 1&oq = recursu&aq = 2sL&aqi = g-L2g-sL1g-L2&bav = on.2、または.r_gc.r_pw。&biw = 1920&bih = 967 – daGrevis

+0

http://stackoverflow.com/questions/ 717725/understanding-recursion – daGrevis

答えて

0
program test;  
var 
result : longint; 
num,i, error: integer; 
strnum: string; 

function fib(n : integer) : longint; 
begin 
    if n <= 2 then fib := 1 
    else fib := fib(n-2) + fib(n-1); 
end; 

begin 
if ParamCount = 0 then 
begin 
    writeln('Enter integer:'); 
    readln(strnum); 
    val(strnum,num,error); 
end else 
begin 
val (ParamStr(1), num, error); 
end; 
for i := 1 to num do 
begin 
    result:= fib(i); 
    writeln(i, ' : ', result); 
end; 

end.