gpt4 book ai didi

c - 在带有while循环的c中使用递归函数的阶乘程序

转载 作者:太空宇宙 更新时间:2023-11-04 07:35:42 25 4
gpt4 key购买 nike

在带有 while 循环的 C 中使用递归的阶乘程序。大家好,感谢您宝贵的回复。

  1. 你们都说用(if condition 而不是 while)。它是正确的我接受你的建议。那我为什么不使用 while 来使用递归函数查找阶乘呢。

  2. 有人说 while(n>1) 是一个无限循环。但在这个程序中,n 值在 fact(n-1) 函数本身中递减。现在在这个程序中,我在 while 循环之后放置了 printf()getch() 以了解 n 的值。 printf()getch() 函数仅在 while 条件变为假时执行。

当我运行这个程序时,printf() 函数和 getch() 函数重复执行并且 printf() 函数返回 n value = 1。所以我确定n的值是递减的。那为什么这个程序会一遍又一遍的执行while循环呢?

  1. 在所有函数中,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);
}

最佳答案

你确实有一个无限循环。 fact(n-1) 行不会减少 n 的值。它使用较小的 n 调用了该函数的另一个调用。

因此,如果您调用 fact(2),您将调用 n==2。在此函数中,您有一个调用 fact(1) 的无限循环。在第二个调用中,n==1,所以循环条件为假,这个调用打印你的行并返回 - 进入第一个调用的无限循环(它的 n 仍然是 2).

关于c - 在带有while循环的c中使用递归函数的阶乘程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9255156/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com