递归函数

0 投票
4 回答
1072 浏览
提问于 2025-04-16 08:14

我正在尝试写一个递归函数,这个函数接收一个整数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,

撰写回答