在尝试寻找编写递归阶乘函数的不同可能性时,我注意到我对在以下递归函数中使用 while
或 if
的差异感到困惑。我使用 gdb 调试器
观察了每个选项的步骤,也看不出任何差异。我知道 while 循环的功能,并且它是迭代工作的。但是由于它的体中包含了函数的递归调用作为return语句,所以当前的函数应该'left'并且应该进入一个新的函数,这会导致进入一个新的while循环吗?在我看来,在这种情况下它的工作方式就像常规的 if 语句
?我感谢对此的任何澄清。
#include <stdio.h>
#include <stdlib.h>
int recursion(int n)
{
while(n > 0)
return n * recursion(n-1);
return 1;
}
int main(void)
{
int n = 5;
printf("%d\n", recursion(n));
return EXIT_SUCCESS;
}
使用 if
的替代递归函数会产生相同的结果:
int recursion(int n)
{
if(n > 0)
return n * recursion(n-1);
return 1;
}
最佳答案
在这种情况下,这在技术上是相同的,因为一旦进入 while 循环,就可以使用 return
语句退出它。下面两条语句也是一样的:
while (a) {
b;
break;
}
和
if (a) {
b;
}
但是在这种情况下你不应该使用 while
因为它是用于循环的,所以应该有它执行多次的执行路径。同时存在 if
和 while
是有原因的。
关于C 递归中使用if或while的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34178725/