Java递归方法sum(7)运行输出13的具体原因是什么?
你给出的Java代码如下:
public class Test{ public static int sum(int num){ if (num <= 1){ return num; } return 2 + sum(num -1); } public static void main(String []args){ System.out.print(sum(7)); } }
1 递归逻辑规则
sum方法的执行逻辑分为两个分支:
- 终止分支:当入参
num小于等于1时,直接返回num本身,不再继续递归 - 递归分支:当入参
num大于1时,返回值为2加上sum(num-1)的计算结果
2 完整执行过程拆解
调用sum(7)的完整展开和回推过程如下:
递归向下展开阶段(从入参7到触发终止条件)
- sum(7) = 2 + sum(6)
- sum(6) = 2 + sum(5)
- sum(5) = 2 + sum(4)
- sum(4) = 2 + sum(3)
- sum(3) = 2 + sum(2)
- sum(2) = 2 + sum(1)
- sum(1) 触发终止条件,返回 1
结果向上回推阶段(从终止值开始逐层计算上层返回值)
- sum(2) = 2 + sum(1) = 2 + 1 = 3
- sum(3) = 2 + sum(2) = 2 + 3 = 5
- sum(4) = 2 + sum(3) = 2 + 5 = 7
- sum(5) = 2 + sum(4) = 2 + 7 = 9
- sum(6) = 2 + sum(5) = 2 + 9 = 11
- sum(7) = 2 + sum(6) = 2 + 11 = 13
3 结果为13的数学逻辑
这个递归本质是等差数列计算:从num=1开始,每往上加一层就多+2,一共执行了num-1次+2操作,再加上终止条件返回的1,最终计算公式为:sum(num) = 2*(num-1) + 1 = 2*num -1
代入num=7可得:2*7 -1 =13,和执行结果完全一致。
内容的提问来源于stack exchange,提问作者Chris Agbemabiese
相关产品推荐
相关产品推荐

