2016-01-23 41 views
3

我必須使用遞歸函數來生成時間表代碼。我必須要求用戶輸入一個數字並打印1到12的時間表。我必須使用遞歸函數,並且不允許使用for循環或while循環,並且除用戶輸入之外的所有變量都必須定義在功能裏面。我無法定義用戶提供的號碼需要乘以的號碼。 E.X. 2 x 2 x 2 x 。Python時間表遞歸代碼

def times_tables(num): 
    def multiply(x): 
     product = x * num 
    if x < 12: 
     print (str(multiply(x + 1))) 

user = input("Enter a number: ") 
times_tables(user) 

如果我在times_tables功能,那麼每一個函數運行它會被設回無論我將它設置爲第一次的時間定義x。謝謝你的幫助。

+0

如果我記得遞歸很好,我認爲你必須設置條件。從基本案例開始。簡單步驟。然後進行下一步(第2個最簡單的步驟)參考最簡單步驟的結果。然後從那裏出發。 – yftse

+0

你從不修改x,你沒有從multiply(x)返回任何東西, – AlokThakur

回答

0

我不知道如果我理解你的任務,但這裏是我的嘗試:

def timetable(n, time=1): 
    if time <= 12: 
     print(n, time, n*time) 
     timetable(n, time+1) 
    else: 
     return 

timetable(int(input('Number: '))) 
0

你沒有修改X,X是按值傳遞,這意味着它被複制。

如果您希望在遞歸之外保持退出條件,您需要一種直接從遞歸編寫X的方法,這可能涉及到全局(所以請避免使用不良做法)。

您需要將退出條件乘以內,因爲這將是您的遞歸,在這種情況下,您的X將增加,並且您將檢查正確遞增的值。或者像ruggfrancesco建議的那樣一起改變功能

0
def times_tables(n, t=1): 
    if t == 13: 
     return 
    print(str(n) + " x " + str(t) + " = " + str(n*t)) 
    times_tables(n, t+1) 

times_tables(int(input("Enter number: "))) 

Enter number: 3 
3 x 1 = 3 
3 x 2 = 6 
3 x 3 = 9 
3 x 4 = 12 
3 x 5 = 15 
3 x 6 = 18 
3 x 7 = 21 
3 x 8 = 24 
3 x 9 = 27 
3 x 10 = 30 
3 x 11 = 33 
3 x 12 = 36