当前位置:  开发笔记 > 编程语言 > 正文

使用if或while递归时的C差异

如何解决《使用if或while递归时的C差异》经验,为你挑选了1个好方法。

在尝试找到编写递归因子函数的不同可能性时,我注意到我对使用whileif在下面的递归函数中的差异感到困惑.我看了每个选项的步骤使用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在这种情况下使用它,因为它是用于循环的,所以应该有多次执行的执行路径.还有一个原因,有两个ifwhile.



1> Fabian Schmi..:

在这种情况下,这在技术上是相同的,因为只要您输入while循环,就可以使用该return语句退出它.以下两个陈述也是相同的:

while (a) {
  b;
  break;
}

if (a) {
  b;
}

但是你不应该while在这种情况下使用它,因为它是用于循环的,所以应该有多次执行的执行路径.还有一个原因,有两个ifwhile.

推荐阅读
jerry613
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有