初学者求助:请解释下述Java递归求和代码的执行过程
递归求和代码的执行逻辑详解
这段代码用的是递归思路来计算1到n的累加和,咱们一步步拆解sum(4)的执行过程,就能彻底搞懂它的运行逻辑:
递归的“拆解”阶段(从大到小调用)
- 当
main方法调用sum(4)时,因为4≠0,所以它不会直接返回结果,而是先执行return sum(3) + 4,需要等待sum(3)的计算结果 - 接着调用
sum(3),3≠0,执行return sum(2) + 3,等待sum(2)的结果 - 调用
sum(2),2≠0,执行return sum(1) + 2,等待sum(1)的结果 - 调用
sum(1),1≠0,执行return sum(0) + 1,等待sum(0)的结果 - 调用
sum(0),此时触发终止条件if(n == 0) return 0,直接返回0——这是递归的关键,没有这个终止条件,代码会无限调用直到栈溢出
递归的“回溯”阶段(从小到大计算结果)
现在开始从最底层的结果往回算:
sum(1)拿到sum(0)返回的0,计算0 + 1 = 1,把1返回给sum(2)sum(2)拿到sum(1)返回的1,计算1 + 2 = 3,把3返回给sum(3)sum(3)拿到sum(2)返回的3,计算3 + 3 = 6,把6返回给sum(4)sum(4)拿到sum(3)返回的6,计算6 + 4 = 10,最终把10返回给main方法,然后System.out.println就打印出这个结果了
简单总结:递归就是先把大问题拆成一个个更小的子问题,直到碰到终止条件拿到最小的结果,再从底层往回逐步计算,最终得到原问题的答案。
内容的提问来源于stack exchange,提问作者Dan Volovsky
相关产品推荐
相关产品推荐

