####含む ######
int power(int x,int n)
if (n>1)
{
return x*power(x,n-1);
}
###それ以外###{
if (n>0)
x を返す;
###それ以外###1を返す;
}
}
void main()
{
int x,n;
printf("入力 x,n:");
scanf("%d%d",&x,&n);
printf("%d",power(x,n));
getch();
clrscr();
}
関数再帰に関するC言語
あなたの再帰プログラムは間違っています。説明付きで正しいプログラムを転送しますので、見てください。
言語関数の再帰と呼び出し
1. 基本的な内容:
1. C 言語の関数は再帰的に呼び出すことができます。
2. 直接または間接的に呼び出すことができます。現在、直接の再帰呼び出しのみについて説明します。
2. 再帰的な条件
再帰的手法を使用して問題を解決するには、次の 3 つの条件を満たす必要があります:
1. 解決すべき問題は新しい問題に変換できますが、この新しい問題の解決策は、処理されるオブジェクトが定期的に増加または減少することを除けば、元の解決策と同じです。
注: 問題の解決方法は同じです。呼び出し関数のパラメータは毎回異なります(定期的なインクリメントまたはデクリメント)。パターンがないと再帰呼び出しは適用できません。
2. この変換プロセスは問題を解決するために適用できます。
注: 他の方法を使用すると解決が面倒または困難ですが、再帰的方法を使用すると問題をうまく解決できます。
3. 再帰を終了するには明確な条件が必要です。
注: 再帰呼び出しを適切な場所で終了できる必要があります。そうしないと、システムがクラッシュする可能性があります。
3. 再帰的な例
例: 再帰メソッド n!
の使用n>1 の場合、n!問題は n*(n-1) に変形できます。新しい質問。
例: n=5:
パート 1: 5*4*3*2*1 n*(n-1)!
パート 2: 4*3*2*1 (n-1)*(n-2)!
パート 3: 3*2*1 (n-2)(n-3)!
パート 4: 2*1 (n-3)(n-4)!
パート 5: 1 (n-5)! 5-5=0、値 1 を取得し、再帰を終了します。
ソースプログラム:
fac(int n)
{int ;
if(n==1)||(n==0) 1 を返します;
###それ以外###{ t=n*fac(n-1);
戻り値;
}
}
###主要( )###{int m,y;
printf(“m:を入力してください”);
scanf(“%d”,&m);
if(m ###それ以外###
{y=fac(m);
printf(“\n%d! =%d \n”,m,y);
}
}
4. 再帰の説明
1. 関数がそれ自体を呼び出すと、システムは関数内の現在の変数と仮パラメータを自動的に一時的に保持します。新しい呼び出しラウンド中に、システムは新しく呼び出された関数の変数と仮パラメータを使用します。追加のストレージユニット(メモリスペース)を増やします。各関数呼び出しで使用される変数は、異なるメモリ空間にあります。
2. 再帰呼び出しのレベルが増えるほど、同じ名前の変数によって占有される記憶域ユニットが増えます。関数が呼び出されるたびに、システムは関数の変数用に新しいメモリ空間を開くことを覚えておくことが重要です。
3. 今回呼び出された関数が終了すると、システムはこの呼び出しによって占有されていたメモリ空間を解放します。プログラムの流れは前の層の呼び出し点に戻り、同時にこの層に入ると関数内の変数や仮引数が占有するメモリ空間のデータを取得します。
4. すべての再帰的問題は非再帰的メソッドで解決できます。しかし、より複雑な再帰的問題の一部では、非再帰的メソッドを使用するとプログラムが非常に複雑になり、読みにくくなることがよくあります。関数の再帰的呼び出しでこの問題を解決できます。このような問題に対処する場合、プログラムを簡潔かつ明確にし、読みやすさを向上させることができます。ただし、再帰呼び出しプロセス中に、システムは呼び出しの各層で変数用のメモリ領域を開き、各呼び出しの後の戻り点を覚えておく必要があります。関数への再帰呼び出しにより、多くの余分なオーバーヘッドが追加されるため、通常はプログラムの実行効率が低下します。
5. プログラムの流れ
fac(int n) /*呼び出しごとに異なるパラメータを使用*/
{ int t; /*呼び出しごとに、変数 t に対して異なるメモリ空間が開かれます*/
if(n==1)||(n==0) /*これらの条件が満たされる場合は 1 を返します */
1を返す;
###それ以外###{ t=n*fac(n-1); /*ここでプログラムが実行されるたびに、この関数は n-1 をパラメータとして再度呼び出されます。これがコール ポイントです*/
return t; /*前の文で呼び出されたすべてのプロセスが完了した場合にのみ、ここで実行されます。 */
}
}
以上がC言語でpower関数を再帰的に実装し、main関数で呼び出します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。