递归,Python,计数,倒计时

The*_*ist 2 python recursion

我应该写一个counting(5)打印的递归函数5 4 3 2 1 0 1 2 3 4 5.
我已经在下面制作了两个函数,每个函数都有一半,但我需要它们放在一起.

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,
Run Code Online (Sandbox Code Playgroud)

Reu*_*ani 5

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

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
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)

  • 超级圆滑的答案+ 1。我认为“not n”也是最重要的一行,因为当“n”达到“0”时,“not n”为真,然后反转开始。 (2认同)