ホームページ  >  記事  >  コンピューターのチュートリアル  >  C言語でpower関数を再帰的に実装し、main関数で呼び出します。

C言語でpower関数を再帰的に実装し、main関数で呼び出します。

WBOY
WBOY転載
2024-01-09 09:54:321381ブラウズ

C 言語の質問では、再帰的メソッドを使用してべき関数を作成し、C 言語を使用して main 関数でそれを呼び出します。 /*x^n の値は 32767 未満である必要があります。それ以外の場合、出力は負の数になります。これは int 型の値の範囲が限られているためで、通常の pow 関数は float 型または double 型を使用することが多く、パラメータも float 型または double 型にする必要があります。 */

C言語でpower関数を再帰的に実装し、main関数で呼び出します。 ####含む ######

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. 基本的な内容:

C 言語の関数は再帰的に呼び出すことができます。つまり、自分自身を直接 (単純再帰) または間接的に (間接再帰) 呼び出すことができます。 ###キーポイント:###

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 サイトの他の関連記事を参照してください。

声明:
この記事はdocexcel.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。