如何递归计算指定范围偶数和?如何将迭代求和函数改写为递归实现?
递归计算偶数和的实现思路与代码改写
嘿,刚学递归踩坑太正常啦!我来一步步帮你把迭代版的偶数求和改成递归实现,先从递归的核心逻辑说起~
递归计算偶数和的核心逻辑
递归的关键就是两点:
- 基线条件:必须有一个停止递归的临界点,不然函数会无限调用自己直到栈溢出
- 递归条件:把原问题拆解成更小的、和原问题结构一致的子问题,让函数自己调用自己解决子问题
针对“计算指定范围(到n)内偶数的和”这个问题:
- 基线条件:当
n < 2时,没有偶数可以累加,直接返回0 - 递归条件:
- 如果n是奇数,那它本身不是偶数,我们只需要计算到
n-1的偶数和就行 - 如果n是偶数,那总和就是
n加上n-2范围内的偶数和(因为n-2是比n小的下一个偶数)
- 如果n是奇数,那它本身不是偶数,我们只需要计算到
迭代函数的递归改写
你的迭代版函数是计算从2到n的偶数和,我们按照上面的逻辑直接改写:
def sum_even(n): # 基线条件:没有偶数可加时返回0 if n < 2: return 0 # 处理n为奇数的情况:等价于计算到n-1的偶数和 if n % 2 != 0: return sum_even(n - 1) # 偶数情况:当前n加上更小范围的偶数和 return n + sum_even(n - 2)
验证一下效果
比如调用sum_even(6),递归过程是这样的:
sum_even(6)→ 6 + sum_even(4)sum_even(4)→ 4 + sum_even(2)sum_even(2)→ 2 + sum_even(0)sum_even(0)→ 0(触发基线条件)
最后累加结果就是6+4+2+0=12,和你的迭代版本结果完全一致~
内容的提问来源于stack exchange,提问作者xstrongman
相关产品推荐
相关产品推荐

