首先,这不是功课。我正在练习http://codingbat.com/java/Recursion-1的例子。每次我认为我开始理解递归时,我遇到一个让我意识到我不知道的问题,导师或互联网解释所说的唯一的事情是“该函数调用自己直到基本情况得到满足。 “
public int sumDigits(int n) {
if(n < 10) {
return n;
} else return sumDigits(n/10) + n % 10;
}
如果我在计算机上将115传递给它,输出为7(应该如此),但我不明白程序是如何得出这个结论的。我就是这样看的:
115不小于10,所以以115/10(即11)返回程序。 11不小于10,所以以11/10(即1)返回程序。将其添加到115%10(即5)。那么这个程序如何获得7 ???
似乎无论我看多少个例子,我都找不到一个如何运作的模式。
答案 0 :(得分:1)
如果您交换+的两个操作数,也就是将其更改为读取,您可能会发现更容易推理此代码:
return (n % 10) + sumDigits(n / 10)
即
sumDigits(115) = 5 + sumDigits(11)
sumDigits(11) = 1 + sumDigits(1)
sumDigits(1) = 1
如此扩展:
sumDigits(115) = 5 + (1 + sumDigits(1))
= 5 + 1 + 1
= 7
答案 1 :(得分:1)
答案 2 :(得分:0)
你几乎是正确的,退回递归时只错过了一步 - 从11/10
返回时,你又添加了另一个1
: