while ループを使用した C での再帰を使用した階乗プログラム。こんにちは、貴重な回答をありがとうございます。
あなたはすべて(whileの代わりにif条件)を使用すると言いました。その正しい私はあなたの提案を受け入れます。それでは、再帰関数を使用して階乗を見つけるために while を使用しないのはなぜですか。
誰か
while(n>1)
が無限ループだと言った。しかし、このプログラムn
では、値はfact(n-1)
関数自体で減分されます。このプログラムでは、 while ループの後にprintf()
andを配置して、 の値を確認しています。and関数は、while 条件が false になった場合にのみ実行されます。getch()
n
printf()
getch()
このプログラムを実行すると、printf()
関数とgetch()
関数が繰り返し実行され、printf()
関数の戻りn
値 = 1 になります。そのため、 の値n
が減少していると判断します。では、なぜこのプログラムは何度も何度も while ループを実行するのでしょうか?
- すべての関数で、return ステートメントは最後の関数終了ステートメントです。実行が return ステートメントに到達すると、実行は関数から終了し、呼び出された関数の次の行に戻ります。しかし、このプログラムでは、実行が return ステートメントに到達した後、同じ関数を繰り返し実行します。何故ですか?
注: このプログラムを実行するために Turbo C 3.0 を使用しています。
#include<stdio.h>
int fact(int n)
{
int x=1;
while(n>1)
{
x=n*fact(n-1);
}
printf("N value after the while loop:%d",n);
getch();
return(x);
}
void main()
{
int n,fact1;
scanf("%d",&n);
fact1=fact(n);
printf("%d",fact1);
}