2016-09-16 6 views
0

私は、反復回数であるxと繰り返される数値または文字列であるyの2つの引数を受け取るPython関数を記述しようとしています。文字列を一定回数印刷する再帰関数を作成するにはどうすればよいですか?

これまでのところ、これまで私が思いついたことはありますが、再帰的なやり方を決めることができないようです。

def recurse(x, y): 
    final = [] 
    if x == 0: 
     return ("") 
    else: 
     x = x - 1 
     final.append(recurse(x,y))    
    return final 

recurse(3,"Cat")が呼び出された場合、出力は次のように見えるように意図されています

print recurse(3, 'cat') 
['cat','cat','cat'] 

は、どのように私はこれを行うに行きますか?

+1

再帰を理解するには、再帰を理解する必要があります。再帰関数から再帰関数を呼び出す必要があります。 – vpekar

+0

映画「インセプション」を見ることも役に立ちます –

答えて

0
def recurse(x, y): 
    final = [] 
    if times == 0: 

「時間」は、まるでどこでも利用できる魔法の浮遊変数のように参照することはできません。ここに初めて、timesは価値がありません。そして次回には、薄い空気の中からtimesの値を選ぶだけでいいのではないかと期待しています。

あなたが扱うことができる唯一の変数は、関数の中に完全に含まれている変数か、外側から渡され、最後に返される変数です。それは[word]戻り、入力として1を加えた(これは、回数をとり -

def recurse(times, word): 
    if times == 1: 
     return [word] 
    else: 
     return [word] + recurse(times-1, word) 

print(recurse(3, 'cat')) 

Try it online at repl.it

は、それが[word]を返しプラス(これは、回数をとり、入力として回数を取り - 1入力として、それは)[word]を返し

注意が再び空になる機能を介して各時間蓄積がプログラミング言語関数および戻り値を呼び出すように暗黙的に起こるので、final = []等全くアキュムレータリストはありません。 s。 Pythonはメモリ内に[word]を保持し、次のrecurse()出力を計算します。

+0

「times」の参考情報は残念です。私は自分のコードで間違いを犯しました。私は今質問を修正しました。 – proton

+0

あなたのコードは@TessellatingHecklerでうまく機能しました。ありがとう – proton

1

実際の機能再帰はでなく、の割り当て(状態)を持つ必要があります。 これは、アキュムレータと呼ばれるものを使用して実現できます。つまり、ベースケースが発生してアキュムレータの最終形式が直接的に返され、間接的にが終わるまで、連続して各再帰ステップに渡される配列です。を最初の呼び出しインスタンスに戻します。任意の時点で状態の変化がないこと

>>> def recurse(Iters, text, Accumulator=[]): 
... if Iters == 0: return Accumulator     # base case 
... return recurse(Iters-1, text, Accumulator + [text]) # recursive step 
... 
>>> recurse(3, 'helle') 
['helle', 'helle', 'helle'] 

注意。すべての「更新」は、更新された引数で次の再帰的なステップを呼び出す時点で行われます。

関連する問題