首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >递归、Python、countup、countdown

递归、Python、countup、countdown
EN

Stack Overflow用户
提问于 2017-09-13 23:29:00
回答 3查看 8K关注 0票数 3

我应该编写一个打印5 4 3 2 1 0 1 2 3 4 5的递归函数counting(5)

我在下面做了两个函数,每个函数各做一半,但我需要把它们放在一起。

代码语言:javascript
复制
def countdown(n):
    if n == 0:
        print 0
    else:
        print n,
        countdown(n-1)

def countup(n):
    if n >= 1:
        countup(n - 1)
        print n,
EN

回答 3

Stack Overflow用户

发布于 2017-09-13 23:32:37

我认为诀窍是理解递归点并不会结束执行:

代码语言:javascript
复制
def count_down_up(n):
    if not n:
        print n  # prints 0 and terminates recursion
        return
    print n  # print down 5, 4, 3, 2, 1
    count_down_up(n-1)  # recursion point
    print n  # prints up 1, 2, 3, 4, 5

您可以看到每个步骤打印n, <RECURSION>, n,它展开为:

代码语言:javascript
复制
5, <count_up_down 4>, 5
5, 4, <count_up_down 3>, 4, 5
# ...
5 ,4, 3, 2, 1, <count_up_down 0>, 1, 2, 3, 4, 5   # recursion stops ...
5, 4, 3, 2, 1, 0, 1, 2, 3, 4, 5
票数 6
EN

Stack Overflow用户

发布于 2017-09-13 23:40:56

@Reut_Sharabani解决方案很好,但我认为这样读起来更简单:

代码语言:javascript
复制
def countdown(N,n):
    if abs(n) > N:
        return
    else:
        print(abs(n))
        countdown(N,n-1)

像这样调用:

代码语言:javascript
复制
countdown(5,5)
票数 2
EN

Stack Overflow用户

发布于 2017-09-14 00:06:59

一种方法是在递归过程中跟踪两个列表,然后在最后返回时将它们缝合在一起。

代码语言:javascript
复制
def countdown_up(n, i=0, down=[], up=[] ):
    if n >i:
        return countdown_up(n-1, i, down+[n], [n]+up)
    else:
        # stich the 2 lists together with the low point [i]
        return down+[i]+up

# by default it counts down to 0. 
>>>countdown_up(5)
[5, 4, 3, 2, 1, 0, 1, 2, 3, 4, 5]
# you can run with any arbitrary high and low numbers. 
>>>countdown_up(10, 3)
[10, 9, 8, 7, 6, 5, 4, 3, 4, 5, 6, 7, 8, 9, 10]    

要让函数打印而不是返回列表,我们只需更改一行。

代码语言:javascript
复制
def countdown_up(n, i=0, down=[], up=[] ):
    if n >i:
        return countdown_up(n-1, i, down+[n], [n]+up)
    else:
        print(" ".join("%s "%x for x in down+[i]+up))


>>>countdown_up(5)
5  4  3  2  1  0  1  2  3  4  5 
>>>countdown_up(10,3)
10  9  8  7  6  5  4  3  4  5  6  7  8  9  10 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46201436

复制
相关文章

相似问题

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