我试图写一个递归函数,它取一个整数,n,然后把所有偶数给零,然后每个数给n.
到目前为止,这就是我所拥有的
def kaboom(n):
if n>=0:
if n%2==0:
print n,
print kaboom(n-2),
else:
n=n-1
print n,
print kaboom(n-2),
print n,
n=n+1
return n输出是
kaboom(5)
4 2 0 None 0 1 2 3 4
5kaboom(4)
4 2 0 None 0 1 2 3 45
,但应该是
kaboom(5)
4 2 0 1 2 3 4 5和
kaboom(4)
4 2 0 1 2 3 4顺便说一句,这不是家庭作业:)
发布于 2010-12-08 16:19:46
在通过递归“向下”的过程中打印偶数,在“返回”的路上打印每个数字,每次减少1次。在print语句之后使用,,在数字后面加上空格而不是换行符。不要返回值,也不要打印返回的值。
def kaboom(n):
if (n % 2) == 0: print n,
if n == 0: return # we "hit bottom"
kaboom(n-1) # make the recursive call
# From this point on, we are "on the way back", and print each value.
print n,发布于 2010-12-08 16:28:47
def kaboom(n):
if n >= 0:
if n%2 == 0:
print n,
kaboom (n-1)
if n > 0:
print n,测试:
>>> kaboom(4)
4 2 0 1 2 3 4
>>> kaboom(5)
4 2 0 1 2 3 4 5发布于 2010-12-08 18:35:05
下面是迭代工具的方法。不递归:
from itertools import chain, imap
def even_down_all_up(x):
return ' '.join(imap(str, chain(xrange(x-1 if x%2 else x, 0, -1), xrange(0, x+1))))
print even_down_all_up(5)
4 2 0 1 2 3 4 5
print even_down_all_up(4)
4 2 0 1 2 3 4仅返回字符串的版本:
from itertools import chain, imap
def even_down_all_up(x):
return imap(str, chain(xrange(x-1 if x%2 else x, 0, -1), xrange(0, x+1)))
print list(even_down_all_up(5))
['4', '2', '0', '1', '2', '3', '4', '5']
print tuple(even_down_all_up(4))
('4', '2', '0', '1', '2', '3', '4')Iterator版本返回ints
from itertools import chain, imap
def even_down_all_up(x):
return chain(xrange(x-1 if x%2 else x, 0, -1), xrange(0, x+1))
print tuple(even_down_all_up(4))
(4, 2, 0, 1, 2, 3, 4)注意:我喜欢堆栈溢出,因为它给了我一些问题来应用迭代工具。)编辑:添加int返回版本。
https://stackoverflow.com/questions/4389581
复制相似问题