递归中n-1的作用是什么?数组求和递归代码疑问解析
数组求和递归代码解析
先明确这个递归函数的核心作用:sum(arr, n) 是计算数组 arr 的前n个元素的总和,参数 n 代表要参与求和的元素个数,不是数组索引。
你的两个问题解答:
sum(arr, n - 1)中的n-1是什么?
这里的n-1是待求和的元素个数(也就是你说的“待求和数组元素的长度”)。原函数的n是取前n个元素求和,n-1就表示递归计算前n-1个元素的总和——这是递归拆解问题的关键:把“求前n个元素和”拆成“求前n-1个元素和”加上最后一个元素的值。arr[n - 1]中的[n-1]代表什么?
是的,n-1是数组的索引,对应数组的第n个元素(因为数组索引从0开始)。比如当n=5时,arr[5-1]就是arr[4],对应数组[5,4,7,9,2,6]里的元素2,也就是前5个元素中的最后一个。把前n-1个元素的和加上这个元素,就得到了前n个元素的总和。
具体递归执行过程(以 sum([5,4,7,9,2,6],5) 为例):
- 调用
sum(arr,5)→ 返回sum(arr,4) + arr[4](arr[4] = 2) - 调用
sum(arr,4)→ 返回sum(arr,3) + arr[3](arr[3] = 9) - 调用
sum(arr,3)→ 返回sum(arr,2) + arr[2](arr[2] = 7) - 调用
sum(arr,2)→ 返回sum(arr,1) + arr[1](arr[1] = 4) - 调用
sum(arr,1)→ 返回sum(arr,0) + arr[0](arr[0] = 5) - 调用
sum(arr,0)→ 触发n<=0的条件,返回0 - 回溯计算:
0+5=5→5+4=9→9+7=16→16+9=25→25+2=27,最终结果为27。
内容的提问来源于stack exchange,提问作者Dafe Victor
相关产品推荐
相关产品推荐

