C 递归中使用if或while的区别

标签 c if-statement recursion while-loop

在尝试寻找编写递归阶乘函数的不同可能性时,我注意到我对在以下递归函数中使用 whileif 的差异感到困惑。我使用 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 因为它是用于循环的,所以应该有它执行多次的执行路径。同时存在 ifwhile 是有原因的。

关于C 递归中使用if或while的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34178725/

相关文章:

c - 如何横向字符串的数字,然后分配给变量

excel - Excel-有条件地隐藏错误

html - &lt;!--[if IE]> 无法在任何浏览器中运行

java - 当我向堆栈推送较少数据时,为什么堆栈会溢出?

c# - 为什么此递归不产生 StackOverFlowException?

c++ - 类递归数组

c - C 中的每月付款,变量和输出问题

编译 Visual Studio 解决方案命令行

C - 创建动态矩阵函数的问题

ios - 在传递选定按钮的单元格中有多个按钮将数据设置为单元格