求解递归

问题描述:

为什么总是返回9加上答案的实际值。例如,对于数字1234,答案是1,但函数返回10.我不知道为什么是这种情况,我很确定这是与递归有关,但我不知道。求解递归

int fun(int n) { 
    if (n <= 9) { 
     return n; 
    } else { 
     return fun(n/10) + (n % 10); 
    } 
} 
+4

你相信你的答案*应该是1吗? – Makoto

+7

看起来这种方法总结了数字的所有数字,即'10'。它应该做什么来返回'1'? – rgettman

+0

我在这里看不到问题,输出很好。它返回上面提到的数字的总和。 – theVoid

至于诚表示,目前还不清楚为什么你认为答案应该是1,但是,如果你做的递归分析得到以下:

fn(1234) = fn(123) + 4 = 10 
fn(123) = fn(12) + 3 = 6 
fn(12) = fn(1) + 2 = 3 
fn(1) = 1 

因此,使用简单的替换,你会得到:

fn(1234) = 1 + 2 + 3 + 4 = 10 
+0

谢谢编辑Pshemo;我正在修理它,尝试提交,但收到一条消息,指出您已经编辑过。感谢超级快速响应! :-) – ILoveCode