我试图在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]
如果有人知道任何其他智能解决方案,请启发我。 感谢
答案 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