c - 递归函数怎么会返回一些东西?

标签 c function recursion logic recursive-query

看到一个c语言的递归函数例子。

#include <stdio.h>
int sum(int n);
int main(){
    int num,add;
    printf("Enter a positive integer:\n");
    scanf("%d",&num);
    add=sum(num);
    printf("sum=%d",add);
}
int sum(int n){
    if(n==0)
       return n;
    else
       return n+sum(n-1);    /*self call  to function sum() */
}

但在这里我无法理解 sum 函数实际上只返回 0,这从代码中可见,否则它将返回自身加上 ​​n

那么函数调用是如何被翻译成数字的呢?除了它是 0 之外,函数中没有一行告诉我们返回 n 本身。

最佳答案

如果您观察 sum() 函数 - 它的返回类型为 int。 这意味着当我们从这个函数返回时——返回值将是一个整数。

现在这里的语句是任何递归例程的关键:

return n + sum(n-1);

在这里,我们再次为 (n-1) 调用 sum() 并且它应该返回一个整数。在从此函数返回之前 - 我们将向其添加“n”并从此处返回一个整数。

这个递归例程可以被认为是:

sum(3) = 3 + sum(2) = 3 + 2 + sum(1) = 3 + 2 + 1 + sum(0)

最终等于:3+2+1+0

关于c - 递归函数怎么会返回一些东西?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37474639/

相关文章:

无法在 C 函数中修改未知大小的二维数组

python - python中单链表类的递归实现

recursion - 每个递归过程都可以转化为迭代过程吗?

c - 我们如何检查输入字符串是否是有效的 double 字符串?

c - 此memcpy实现中缺少什么/欠佳?

function - 在函数中指定事件类型的优点?,ActionScript 3

c - list 反印

c - 混合 SSE 整数/浮点 SIMD 指令时,我会受到性能损失吗

java - 如何使用控制台输出来调试 pthread 与 JNI 的交互?

ios - swift 函数参数名称中的间距