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」の print ステートメントを追加したいので、次のようになります。

カウントアップ(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

再帰を 2 番目の関数に移動し、最初の関数で文字列を出力してから 2 番目の関数を呼び出します。

于 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)

しかし実際には、関数は通常、1 つのことを行う (そして、その 1 つのことをうまく行う) ことになっています。あなたは2つの無関係なことを行う関数を求めています(「行こう!」と数えます)。これらの 2 つの無関係なアクションを 2 つの別個の関数/ステートメントに分割する方が確実に優れています。

于 2012-10-09T16:13:41.280 に答える
0

呼び出し元の関数から行うことも、countup「行こう!」を出力する別の関数にすることもできます。再帰的なものを呼び出す前に。

再帰の内側からそれを行うことに必死になっている場合は、先頭から開始して下に再帰するように切り替えてみてください(テストされていませんが、私の頭の中で動作します):

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 に答える