创建递归Python函数

时间:2015-12-08 05:42:25

标签: python

Q1:创建一个评估4n

的递归Python函数

这就是我所拥有的

def multiply(n):
    if n == 1:
        return 1
    else:
        return 4*n*multiply(n-1)

Q2:写一个递归的Python函数,它返回前n个整数的总和

这就是我的......

def sum_n(n):
    if n == 0:
        return 0
    else:
        return n + sum_n(n-1)

只是想知道我的代码是否正确?

2 个答案:

答案 0 :(得分:3)

您的multiply可以修复一些小修改

def multiply(n):
    if n == 0:
        return 0
    else:
        return 4 + multiply(n - 1) 

请注意,它现在与您的sum_n相同,只有一个n已被常量4替换

修改

这个版本的问题是什么?

def multiply(n):
    if n == 1:
        return 1
    else:
        return 4*n*multiply(n-1)

考虑终止案例(n == 1),您必须像我一样制作此return 4或使用n==0return 0

选择n==1作为终止案例也意味着multiply(0)失败。

我无法猜测你在这条回归路径中的想法

return 4*n*multiply(n-1)

通过传递n-1,它确实将递归调用移向终止情况(只要n是正整数),但您应该只是将4添加到返回结果中。考虑:

multiply(4) == 4 + multiply(3) == 4 + 4 + multiply(2) == 4 + 4 + 4 + multiply(1)

<强> EDIT2:

有些人(至少有一个人)抱怨说这对负整数不起作用。这可以通过添加一个简单地将n翻转回正整数的条件来处理。

def multiply(n):
    if n == 0:
        return 0
    elif n < 0:
        return -multiply(-n)
    else:
        return 4 + multiply(n - 1) 

答案 1 :(得分:0)

您可以通过在可以运行它的地方输入代码来查明代码是否正确(例如http://www.tutorialspoint.com/execute_python_online.php或通过在线询问google python ide找到的许多其他代码。)。

然后运行代码并尝试不同的值。

这是编码的重要一步,测试具有不同可能性的代码。不能像你在网站上提出的那样问一个问题。你可以尝试一个问题并发现一个错误,你无法弄清楚如何解决(但请确保你展示你尝试过的东西)。

但是这次实际回答你的问题,EDIT-FROM:在使用python EDIT-TO时,两者都没有按照问题格式化工作:他们现在编译,我看到你发现错误并改变了很高兴看到(没有进一步测试)EDIT-END。没试过Python3。