在python中使用递归的hailstone序列

时间:2014-07-06 07:55:42

标签: python recursion

使用递归实现是否有意义?我在下面写了一些不好的解 请纠正我

def hailstone(n):
    if(n<0):
        print("Invalid input")
        return None
    if(n==1):
        print(1)
        return None
    if(n%2 == 0):
        print(n)
        hailstone(n/2)
    if(n%2==1):
        print(n)
        hailstone((n*3) + 1)

我的问题:

如何将n<0条件移至正确的位置?我错过了或添加了额外的退货声明吗?

1 个答案:

答案 0 :(得分:0)

你的解决方案并不是那么糟糕,它是一个简单的递归解决方案,可以为你提供小n的hilstone序列而不会出现问题。正如指出bu sshashank124似乎有一个缺失的冒号,你应该n<=0而不是n<0

但是,当递归函数仅在函数本身内调用一次时,通常不应使用递归。在这种情况下,递归本质上是一个循环。在您的情况下,可以通过以下方式获得等效功能:

def hailstone(n):
    if(n<=0):
        print("Invalid input")
        return None
    while n > 1:
        if n % 2 == 1:
            n = 3*n + 1
        else:
            n = n / 2
        print n
    return None

无论如何,我建议您将代码发布到代码审核网站:http://codereview.stackexchange.com

(关于你的问题,你可能在函数中有几个return语句。另一个 - 通常更好 - 可能是在你收到错误输入时引发错误。)

如果要计算大量n的序列长度,那么您的算法不一定是表现最佳的算法。