反转递归

时间:2016-11-10 17:03:30

标签: python recursion

我有一个基本的递归函数,它将在给定一个输入数字的情况下打印出一行数字。

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

1 个答案:

答案 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的赋值就会不同并保留。