递归函数如何返回33?

时间:2017-06-02 04:31:09

标签: c recursion

我已经被困在这个上好几个小时了

这是我无法掌握的代码:

before recursive call sum value8  
before recursive call sum value12 
before recursive call sum value12  
before recursive call sum value14 
after recursive call sum value14  
after recursive call sum value33 
after recursive call sum value33  
after recursive call sum value33  
sum value in main33


#include<stdio.h>

int foo(int n,int sum)
{
    int k=0,j=0;

    if(n==0) return sum;

    k=n%10;
    j=n/10;
    sum+=k;
    printf("before recursive call sum value%d\n",sum);

    sum=foo(j,sum);

    printf("after recursive call sum value%d\n",sum);
}

int main()
{
    int a=2048,sum=0;
    sum=foo(a,sum);

    printf("sum value in main%d\n",sum);
}

输出也出现在代码中。

我已经使用堆栈跟踪了函数调用,并且我希望将值14返回给调用函数(main())但是我得到的输出为33,我觉得很难理解。

即使我假设我在某个地方跟踪了递归错误,但是在任何时间点都没有返回所有数字,即使那么它们的总和是33也是奇数?

对此有任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:4)

对于非基本情况,您永远不会在foo()中返回值。请尝试返回总和:

int foo(int n, int sum)
{
    int k=0, j=0;

    if (n == 0) return sum;

    k = n % 10;
    j = n / 10;
    sum += k;
    printf("before recursive call sum value%d\n", sum);

    sum = foo(j, sum);
    printf("after recursive call sum value%d\n", sum);
    return sum;
}