2016-11-10 95 views
2

產生整數的順序我有一個基本遞歸函數,將基本上打印出線路給定的一個輸入數字的數字。反轉由遞歸

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()行將不得不被刪除,但是我不確定如何替換而不嘗試反向計算整個計算。

例, 一級方程式(5)打印出5 16 8 4 2 1 我需要它打印出來1 2 4 8 16 5

+0

請提供一些示例輸出,以及你正在努力實現的(例子)的東西。 – mmenschig

+0

如果你的意思是在這裏做遞歸時,這是非常不好實現。首先,函數返回不同情況下的不同「事物」。其次,調用函數沒有使用返回值(即它被「報廢」;那麼返回它的意義是什麼?)。 –

+1

而不是打印,當您去,您可以返回一個數組,只是打印。可能更容易思考。 – code11

回答

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是不同的,並保存一次遞歸調用返回。