python - 编写一个函数(递归),计算从 1 到 n 的偶数之和
问题描述
我必须编写一个递归函数来计算从 1 到 n 的偶数之和。例如对于n=input= 6
预期output would be: 2+4+6 = 12
def sum_of_even(n):
if not n % 2 == 0:
return n
else:
return n + sum_of_even(n-1)
print(sum_of_even(6))
这给出了输出 11,但我什至不知道我的概念是否正确
解决方案
对代码进行最少的修改:
def sum_of_even(n):
if n==0:
return 0
if not n % 2 == 0:
return sum_of_even(n-1)
else:
return n + sum_of_even(n-1)
print(sum_of_even(10))
您的代码有两个问题:
当数字是偶数时,您没有返回到目前为止计算的值。相反,您正在返回输入值 n。通过这样做,您只是对前一个 n 值求和
value n + sum_of_even(n-1)
。因此,当你这样做时,print(sum_of_even(6))
它返回6 + sum_of_even(6-1)
了 11。如果你这样做print(sum_of_even(5))
了,它只会返回 5。由于上述停止条件不正确,您需要一个合适的停止条件。您想将所有偶数相加直到零(而不是
-inf
),所以:
if n==0:
return 0
编辑:或者,由 Stef 建议,当你找到你的第一个偶数时,你可以简单地移动 2 乘 2 而不是 1 乘 1:
def sum_of_even(n):
if n<=0:
return 0
if not n % 2 == 0:
return sum_of_even(n-1)
else:
return n + sum_of_even(n-2)
推荐阅读
- matlab - 使用 dwt 和 dct 分解和重构图像
- prestashop - 为什么 prestashop 在 Centos 7 上出现安装问题
- mysql - 按有结果但保留没有结果的 SQL 分组
- powershell - 无法通过 SSH 将参数传递给 powershell 脚本
- javascript - Uncaught (in promise) TypeError: snapshot.data is not a function 尝试从 Firebase Firestore 检索文档
- php - Paypal 支付沙盒账户,测试
- discord.py - discord.py 获取某个类别下的所有文本通道 - 在 python 中
- tensorflow - 从张量流图中删除 DecodeJpeg
- java - 如何在java中重绘特定区域(例如圆圈)?
- shell - 如何在 vim 中的 shell 中执行 yanked 多行命令