我在这里的第一篇文章,我是一名喜欢在业余时间编码的初学程序员。对逻辑/理解中任何可能的,明显的(对你)错误提前道歉。
我只是想抓住递归。了解基础案例的结构,基本原理等,抓住整体“放松”的困难。过程
我正在做一些改进的练习。
我正在研究Hailstone Sequence。我的函数很好地生成数字(除非初始输入n = 1,但在这个阶段这是一个小问题),但它应该返回一个平面列表,我能得到的最好的是一个多维数组。 / p>
我希望(如果可能的话)避免在Hailstone函数之外编写单独的函数或任何代码,这些函数会变为“变平”。清单。
我的代码到目前为止。请帮忙!
def hailstone(n):
if n ==1:
return n
else:
if n%2 == 0:
return [n] + [hailstone(n//2)]
else:
return [n] + [hailstone(3*n+1)]
n = int(input())
print(hailstone(n))
答案 0 :(得分:1)
程序输出
print(hailstone(5))
# [5, [16, [8, [4, [2, 1]]]]]
预期输出
print(hailstone(5))
# [5, 16, 8, 4, 2, 1]
您的计划很好,接近预期的结果。问题是,在对hailstone
的递归调用中,您将结果包装在[]
中。
相反,始终返回[n]
并可选地连接序列中的附加术语
def hailstone(n):
if n ==1:
return [n] # always wrap n in []
else:
if n%2 == 0:
return [n] + [hailstone(n//2)] # do not wrap here
else:
return [n] + [hailstone(3*n+1)] # do not wrap here
if / else-> if / else通常使用elif
代替
def hailstone(n):
if n == 1:
return [n]
elif n % 2 == 0:
return [n] + hailstone (n // 2)
else:
return [n] + hailstone (3 * n + 1)
print (hailstone (5))
# [5, 16, 8, 4, 2, 1]
要了解其工作原理,我们会查看hailstone
并注意每个return
分支......
hailstone
始终会返回一个列表,因此我们知道[n] + hailstone(...)
始终是有效的结果