python中使用递归的冰雹序列

python中使用递归的冰雹序列,python,recursion,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):

使用递归实现有意义吗?我在下面写了一些糟糕的解决方案。 请纠正我

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)
def冰雹(n):

如果(n您的解决方案没有那么糟糕,它是一个简单的递归解决方案,它将为您提供小型
n
的冰雹序列,没有任何问题。正如bu
sshashank124
所指出的,似乎缺少一个冒号,您应该在第四次使用
时缺少一个
f不是n%2
并使用隐含的“错误”与'if n%2==1@IanAuld:就我个人而言,我只会使用
if n&1
,尽管这是一个c'ism,因为这是我读得最快的构造…我试图使代码尽可能接近OP的形式和样式。但是,是的,我建议将代码公开给codereview的好人是有原因的。@DrV我看到了multiple
在代码中返回None
。在函数中,如果我不提及这一点,python函数是否会隐式地不返回None
?@overexchange:我只是将
return None
放在那里,因为问题中的代码使用它。您可以使用
return
,而不需要任何返回值,并且您不需要进行任何重新设置转换值。因此,我答案中的代码可以修改为1。删除最后一个
返回值
,2。通过将第一个
返回值无
更改为普通
返回值
。最好的替代方法是将第一个
返回值无
替换为
提升值错误('输入值必须大于0')
在输入值错误时引发异常。@DrV我认为,无论我们使用
返回无
还是仅使用
返回
不返回全部
,函数在所有3种情况下都将返回无。
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