递归函数
我正在尝试写一个递归函数,这个函数接收一个整数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
5
kaboom(4)
4 2 0 None 0 1 2 3 4
5
但应该是
kaboom(5)
4 2 0 1 2 3 4 5
还有
kaboom(4)
4 2 0 1 2 3 4
顺便说一下,这不是作业哦 :)
4 个回答
1
这里有一种使用itertools的方法来实现这个功能。没有使用递归:
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')
这是一个返回整数的迭代器版本:
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)
注意:我喜欢stackoverflow,因为它给了我很多问题,让我可以用itertools来练习。:) 更新:添加了返回整数的版本。
2
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
测试:
8
在递归的过程中,先打印出偶数,然后在回溯的时候,每次减少1再打印一次。使用,
在打印语句后面,这样数字后面会跟一个空格,而不是换行。不要返回任何值,也不要打印返回的值。
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,