本帖最后由 柿子饼同学 于 2025-2-1 23:15 编辑 x = [1, 2, 3, 4]
调用 recsum(x)
一开始: recsum(x) 要返回的是 1 + recsum([2, 3, 4])
接下来 recsum([2, 3, 4]) 是一个子问题, 计算 recsum([2, 3, 4]) 的结果是 2 + recsum([3, 4])
接下来 recsum([3, 4]) 是一个子问题, 计算 recsum([3, 4]) 的结果是 3 + recsum([4])
接下来 recsum([4]) 是一个子问题, 计算 recsum([4]) 的结果是 4 + recsum([])
接下来 recsum([]) 列表为空, 是递归的结束条件, 返回 0
recsum([]) 返回 0, 那么 recsum([4]) 的结果是 4 + 0 == 4, 返回 4
recsum([4]) 返回 4, 那么 recsum([3, 4]) 的结果是 3 + 4 == 7, 返回 7
recsum([3, 4]) 返回 7, 那么 recsum([2, 3, 4]) 的结果是 2 + 7 == 9, 返回 9
recsum([2, 3, 4]) 返回 9, 那么 recsum([1, 2, 3, 4]) 的结果是 1 + 9 == 10, 返回 10
所以调用 recsum(x) 的答案是 10
递归结束条件, 用这个例子讲, 就是如果这个列表还可以分成一个数和后面的和的形式, 那么就是一个子问题, 可以套用我们的 recsum 继续求解
如果列表为空, 就不该继续分割列表求和, 而是返回 0, 这就是 |