首页 > 解决方案 > 编写一个函数(递归),计算从 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,但我什至不知道我的概念是否正确

标签: pythonpython-3.xfunctionrecursion

解决方案


对代码进行最少的修改:

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))

您的代码有两个问题:

  1. 当数字是偶数时,您没有返回到目前为止计算的值。相反,您正在返回输入值 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。

  2. 由于上述停止条件不正确,您需要一个合适的停止条件。您想将所有偶数相加直到零(而不是-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)

推荐阅读