2011-03-01 245 views
0

我試圖在python中反轉給定數字的順序。problem表示標準輸入的第一行包含一個整數t(t < 1001),它是數字的個數。每個下一個t行有一個整數n(n < 1001)。python中給定數字的反向順序

現在我試圖解決這個使用遞歸招:

def f(n,a): 
    if n > 0: 
     a = input() 
     f(n-1,a) 
    print a  
f(input(),0) 

但這不是因爲最後一個號碼正常工作時輸出twice.How解決這一問題?

我給這家明顯的解決方案是:

n=input() 
a=[1]*n 
for i in range(n):a[i]=input() 
a=a[::-1] 
for i in range(n):print a[i] 

如果有人知道的一樣,請賜教過任何其他的智能解決方案。 謝謝

+0

是這個家庭作業?只是因爲你從一個「問題」說出來而提出問題。 – 2011-03-01 22:52:06

+0

@SB:沒有人使用遞歸來反轉數字,除非作業... – 2011-03-01 23:12:28

+0

@:Glenn Maynard:我不確定你是否在跟蹤我,我只是想用各種技巧來解決同一個問題,智能/縮短解決方案,以及有關遞歸的事情,您肯定有權發表您的意見:-) – Quixotic 2011-03-01 23:36:16

回答

3

您可能不希望打印'n == 0'的情況。 嘗試在'如果'內縮進'打印'。

我想你「一個」變量是越來越在「ñ== 0」的情況下重複使用,造成您的問題。

此外,是否有一個特殊的原因,你不只是讀入列表中的輸入,然後扭轉該列表? [我看到你知道如何做到這一點從你的編輯]如果這只是爲了試驗,那麼更多的權力給你。在Python列表有反向()功能,雖然(:

FWIW,這裏是您的解決方案略有變化我嘗試了:

def f(n): 
    if n == 0: 
     return 
    a = input() 
    f(n-1) 
    print a 

f(input()) 

此外,還有Python中一個有趣的函數調用逆轉(),它返回一個迭代器。

x = [1,2,3] 
for i in reversed(x): 
    print i # prints 3, 2, 1 

最後,不完全相關的,但因爲你似乎是學習遞歸...一種方便的方法來調試你的問題可能是把這是您的f的第一行()函數:

print '>' * n, n, a 

也許那會更清楚,爲什麼你有雙打印問題。

0

這裏是我的解決辦法:

def f(n,a=None): 
    if n > 0: 
     f(n-1, input()) 
    if a is not None: 
     print a 

f(input()) 

它的錯誤我一點點,我只好用支票a,但後來我意識到這個問題有點做作呢。您無需知道列表中的項目數量即可將其撤銷。當然None是在輸入中出現0的情況下。

演示:

$ <<< '5 
7 
4 
1 
0 
8' python Desktop/foo.py 
8 
0 
1 
4 
7 
+0

嘗試提交該問題,而不是工作。 – Quixotic 2011-03-01 23:33:45