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