ArithmSumRec(n)
1. If n = 1
1.1 return 1
2. Else
2.1 return ArithmSumRec(n-1) + n
因此,例如我们想要计算n = 5时的情况。它看起来像这样。
Executing ArithmSumRec(5) ⇒ 5 calls to ArithmSumRec(...)
ArithmSumRec(5)
ArithmSumRec(4)
ArithmSumRec(3)
ArithmSumRec(2)
ArithmSumRec(1)
return 1 // base case
return 1 + 2 (= 3)
return 3 + 3 (= 6)
return 6 + 4 (= 10)
return 10 + 5 (= 15)
但我现在的问题是,当方法第一次返回时,
return ArithmSumRec(5-1) + 5;
+n
去哪儿了?如果我已经找到了一个很好的主题,或者我的网站没有彻底解释递归方法,我会非常感激。
答案 0 :(得分:0)
在停止递归之前,递归调用不会返回任何内容。如果不是
if (n==1) return 1;
程序会挂在那里。
但是当你点击返回1时,整个计算都很清楚,你实际上可以返回一个数字:
5 + 4 + 3 + 2 + 1 = 15
答案 1 :(得分:0)
这是操作的顺序。函数调用优先于添加。因此,当你打电话
func(5-1) + 5
...第一个操作是5-1,给出4.现在运行时系统执行调用 func(4)。 在完成后,它最终添加了5。
将您的情况与不同的函数调用进行比较:
sqrt(5-1) + 5
这相当于在所有这些之后将平方根符号覆盖“5-1”并带有“+ 5”。这简化为sqrt(4)+ 5或7.它不评估为9(遵循您的原始语句编写),也不评估为3(来自sqrt(5-1 + 5))。
这有帮助吗?