0
def countup(k, n):
     'counts up from k to n'
     if k == n:
         print(k)
     elif n <= 0:
         print("Let's go!")
     else:
         print(k)
         countup(k+1,n)

我想在递归开始之前添加一个“Let's Go”的打印语句,所以它看起来像这样:

计数(3,6)

我们走吧!
3
4
5
6

4

6 回答 6

1

你可以写一个这样的包装函数

def countup(k,n):
    print "Let's Go"
    _countup(k,n)

def _countup(k, n):
     'counts up from k to n'
     if k == n:
         print(k)
     else:
         print(k)
         _countup(k+1,n)
于 2012-10-09T16:18:21.480 回答
0

将递归移动到第二个函数中,让第一个函数输出字符串,然后调用第二个函数。

于 2012-10-09T16:12:07.050 回答
0

在行前打印,您第一次在哪里调用该方法?当然,您不能直接跳入递归..对吗?

于 2012-10-09T16:12:34.670 回答
0

使用默认参数:

def countup(k, n,go=None):
     'counts up from k to n'
     if go:
         print go
     if k == n:
         print(k)
     elif n <= 0:
         print("Let's go!")
     else:
         print(k)
         countup(k+1,n)
countup(3,6,"Lets go")

输出:

Lets go
3
4
5
6
于 2012-10-09T16:13:16.473 回答
0

对于像这样愚蠢的东西,我使用关键字参数:

def count_up_or_down(k, n, start=True):
     'counts up from k to n'

     if(start):
         print("Let's go!")
     if k == n:
         print(k)
     else:
         print(k)
         sign = 1 if n>k else -1
         count_up_or_down(k+sign,n,start=False)

count_up_or_down(3,6)

但实际上,函数通常应该做一件事(并且做好一件事)。您要求一个执行 2 件不相关的事情的函数(打印“Lets go!”并计数)。将这两个不相关的动作分解为两个单独的函数/语句肯定会更好。

于 2012-10-09T16:13:41.280 回答
0

您可以从调用函数中执行此操作,或者countup使用另一个打印“Let's go!”的函数。在调用递归之前。

如果您一心想从递归内部进行操作,请尝试切换它,以便从顶部开始并向下递归(未经测试,但它在我的脑海中有效):

def countupwithletsgo(k, n):
    if k == n:
        print("Let's go!")
        print(n)
    else:
        countupwithletsgo(k, n-1)
        print(n)

请注意笨拙的函数名称 - 通常是一个好兆头,它不仅仅做一件事,而且可能应该被重构。就像首先建议的包装函数形式一样。

于 2012-10-09T16:14:38.687 回答