ここに私のコードです。再帰、テール再帰と反復
再帰:
#include <stdio.h>
int Recursion(int m,int n)
{
if(m==0 || n==0)
return 1;
else
return 2*Recursion(m-1,n+1);
}
void main()
{
int m,n,result;
m=3;
n=-2;
result=Recursion(m, n);
printf("%d",result);
}
反復
#include <stdio.h>
int Recursion(int m,int n)
{
int returnvalue=1;
while(m!=0 && n!=0)
{
returnvalue=returnvalue*2;
m--; n++;
}
return returnvalue;
}
void main()
{
int m,n,result;
m=3;
n=-2;
result=Recursion(m,n);
printf("%d",result);
}
今、私の疑問は、次のとおりです。
- 私は繰り返しに再帰から変更することを読んで、あなたはスタックを使用して維持する必要がありますデータをプッシュして後でポップします。今私はここでそれをやっているとは思わない。どうして?スタックはいつ使用され、いつ使用されますか?
- 私の翻訳はここでは反復的なものですか?この末尾は再帰的ですか?
Recursion
コードのソースがそう言いました。 - 再帰バージョンから反復バージョンに変更する方法を教えてください。私は本当に私がこれを勉強することができる素敵な情報源が必要です。グーグルはあまり役に立たなかった。
テール再帰が間違っています。末尾の再帰的な関数呼び出しは 'return'の前にのみ起こります(iow' return tailcalled(foo); ')。 – leppie