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
的冰雹序列,没有任何问题。正如busshashank124
所指出的,似乎缺少一个冒号,您应该在第四次使用时缺少一个:
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