我有一个基本的递归函数,它将在给定一个输入数字的情况下打印出一行数字。
def formula1(distance):
if distance == 1:
print(int(distance))
return
elif (distance % 2) == 0:
print(int(distance), end=" ")
return formula1(distance / 2)
elif (distance % 2) == 1:
print(int(distance), end=" ")
return formula1(3*distance + 1)
我现在必须反向打印数字,而不是字符串或列表。我真的不确定如何做到这一点,声明一个新的临时变量只会被覆盖。在参数中定义变量并不会让我觉得......
在上面的功能中,显然必须删除print()行,但是我不确定要替换它而不试图向后计算整个计算。
实施例,
formula1(5)打印出5 16 8 4 2 1
我需要它打印出1 2 4 8 16 5
答案 0 :(得分:1)
您只需要确保在调用print
之前进行递归调用:
def formula1(distance):
if distance == 1:
print(distance, end=" ")
return
elif (distance % 2) == 0:
v = formula1(distance // 2)
print(distance, end=" ")
return v
else:
v = formula1(3 * distance + 1)
print(distance, end=" ")
return v
对formula1
的每次调用都有自己的本地范围,因此一旦递归调用返回,v
的赋值就会不同并保留。