首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >递归函数

递归函数
EN

Stack Overflow用户
提问于 2010-12-08 16:07:19
回答 4查看 1.1K关注 0票数 0

我试图写一个递归函数,它取一个整数,n,然后把所有偶数给零,然后每个数给n.

到目前为止,这就是我所拥有的

代码语言:javascript
复制
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)

代码语言:javascript
复制
4 2 0 None 0 1 2 3 4

5

kaboom(4)

代码语言:javascript
复制
4 2 0 None 0 1 2 3 4

5

,但应该是

kaboom(5)

代码语言:javascript
复制
4 2 0 1 2 3 4 5

kaboom(4)

代码语言:javascript
复制
4 2 0 1 2 3 4

顺便说一句,这不是家庭作业:)

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-12-08 16:19:46

在通过递归“向下”的过程中打印偶数,在“返回”的路上打印每个数字,每次减少1次。在print语句之后使用,,在数字后面加上空格而不是换行符。不要返回值,也不要打印返回的值。

代码语言:javascript
复制
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,
票数 8
EN

Stack Overflow用户

发布于 2010-12-08 16:28:47

代码语言:javascript
复制
def kaboom(n):
    if n >= 0:
        if n%2 == 0:
            print n,
        kaboom (n-1)
    if n > 0:
        print n,

测试:

代码语言:javascript
复制
>>>  kaboom(4)
4 2 0 1 2 3 4
>>> kaboom(5)
4 2 0 1 2 3 4 5
票数 2
EN

Stack Overflow用户

发布于 2010-12-08 18:35:05

下面是迭代工具的方法。不递归:

代码语言:javascript
复制
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

仅返回字符串的版本:

代码语言:javascript
复制
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

代码语言:javascript
复制
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返回版本。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4389581

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档