Java递归总细分

时间:2016-10-24 19:24:35

标签: java recursion

   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;
  1. 但是在括号外的那个5会发生什么。为什么方法不返回9(因为(5-1)+5 = 9?)而是返回4? +n去哪儿了?
  2. 如果我已经找到了一个很好的主题,或者我的网站没有彻底解释递归方法,我会非常感激。

2 个答案:

答案 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))。

这有帮助吗?