试图了解此代码的工作原理。假设整数是4,我知道4是针对基本情况检查的,然后该方法再次使用整数3调用自身,然后出现相同的模式,直到整数为1.我的问题是求和部分是如何完成的?最终的结果是什么?
public int sum(int num)
{
int result;
if (num == 1)
result = 1;
else
result = num + sum(num-1);
return result;
}
答案 0 :(得分:2)
正如我认为您基于帖子意识到的,魔术发生在这里:result = num + sum(num-1);
将其视为一系列方法调用。从逻辑上讲,整个过程可以这样表示:
sum(4);
评估为
4 + sum(3);
评估为
4 + 3 + sum(2);
评估为
4 + 3 + 2 + sum(1);
评估为
4 + 3 + 2 + 1
等于
10
答案 1 :(得分:1)
它发生在这里:
result = num + sum(num-1);
与
一起return result;
迭代 n 再次调用sum()(触发迭代 n + 1 )。返回 n + 1 的结果;并添加到 n ;给出 n-1 的结果(因为后面的return语句)。
并且记录在案:我没有在答案中包含最终解决方案;因为你可以很容易地自己解决这个问题;通过运行该代码;或者用一支笔和一张纸来运行"这段代码"手动"。
答案 2 :(得分:1)
当递归调用返回堆栈时,会发生求和。见这里:
sum(4) # The initial function call
|
|---------------|
| 4 + sum(4-1) | # num + recursive call
|
|---------------|
| 3 + sum(3-1) | # the next num + the next recursive call
|
|---------------|
| 2 + sum(2-1) |
|
|---|
| 1 | # Base case num == 1
如果使用下面的值填充每个递归sum(...)
调用,您会得到什么?总和加起来了。这就是加法发生的地方。
跟踪这一点,找出自己的价值。或者,运行代码。