And*_*ann -1 c recursion if-statement while-loop
在尝试找到编写递归因子函数的不同可能性时,我注意到我对使用while或if在下面的递归函数中的差异感到困惑.我看了每个选项的步骤使用gdb debugger,也看不出任何区别.我知道它的功能while loop,并且它可以迭代地工作.但由于它的主体包含函数的递归调用作为return语句,当前函数应该是'left'并且应该输入一个新函数,这将导致进入一个新的while循环?在我看来,在这种情况下,它的作用就像一个普通的if statement?我对此有任何澄清表示感谢.
#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;
}
Run Code Online (Sandbox Code Playgroud)
使用if导致相同结果的替代递归函数:
int recursion(int n)
{
if(n > 0)
return n * recursion(n-1);
return 1;
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,这在技术上是相同的,因为只要您输入while循环,就可以使用该return语句退出它.以下两个陈述也是相同的:
while (a) {
b;
break;
}
Run Code Online (Sandbox Code Playgroud)
和
if (a) {
b;
}
Run Code Online (Sandbox Code Playgroud)
但是你不应该while在这种情况下使用它,因为它是用于循环的,所以应该有多次执行的执行路径.还有一个原因,有两个if和while.