python中给定数字的反向顺序

时间:2011-03-01 22:49:12

标签: python recursion

我试图在python中反转给定数字的顺序。problem表示标准输入的第一行包含一个整数t(t <1001),这是数字的数量。在每个中接下来的t行有一个整数n(n <1001)。

现在我试图用递归技巧解决这个问题:

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

但这不能正常工作,因为最后一个数字输出两次。如何解决这个问题?

我明显的解决办法是:

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

如果有人知道任何其他智能解决方案,请启发我。 感谢

2 个答案:

答案 0 :(得分:3)

您可能不想在' n == 0 '情况下打印。 尝试在“ if ”中缩进“打印”。

我想你的' a '变量会在' n == 0 '的情况下被重复使用,从而导致您的问题。

此外,是否有一个特殊原因你不只是将输入读入列表,然后反转该列表? [我知道如何从你的编辑中做到这一点< / em>]如果这只是为了实验,那么对你来说更有力量。 python中的列表有一个 reverse()函数,但是(:

FWIW,我试用的解决方案略有不同:

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

f(input())

此外,Python中有一个有趣的函数叫做 reversed(),它会返回一个迭代器。

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

最后,并不完全相关,但是因为你似乎在学习递归...调试问题的一种方便的方法可能是将它作为f()函数的第一行:

print '>' * n, n, a

也许那么为什么你会遇到双重印刷问题会更清楚。

答案 1 :(得分: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