使用递归实现是否有意义?我在下面写了一些不好的解 请纠正我
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
条件移至正确的位置?我错过了或添加了额外的退货声明吗?
答案 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
的序列长度,那么您的算法不一定是表现最佳的算法。