2012-03-27 5 views
1

おかげで、私はほとんど狂気私を運転していたプログラミングの問題で終わりだスタックオーバーフローします。それは再帰的だし、ここでは次のようになります。私が入力した場合ほぼ再帰があります。最後に一つ

def changeling(word,target,steps): 
    x=word 
    z=target 
    if steps==0: 
     return [] 
    if x==z: 
     return [z] 
    if len(word)!=len(target): 
     print "error" 
     return None 
    i=1 

    if lookup(z[0]+x[1:]) is True and z[0]+x[1:]!=x : 
     word=z[0]+x[1:] 
    while i!=len(x): 
     if lookup(x[:i-1]+z[i-1]+x[i:]) and x[:i-1]+z[i-1]+x[i:]!=x: 
      word=x[:i-1]+z[i-1]+x[i:] 

     i+=1 
    if lookup(x[:len(x)-1]+z[len(word)-1]) and x[:len(x)-1]+z[len(x)-1]!=x : 
     word=x[:len(x)-1]+z[len(word)-1] 


    return [x]+changeling(word,target,steps-1) 

changeling("find","lose"4) 

私が受け取る:

['find', 'fine', 'line', 'lone', 'lose'] 

私が欲しいの正確な出力されます。プログラムの私の次のステップはこれです。特定のステップ数で目的の単語に単語を変更できない場合、関数はNoneを返します。だから私は、入力した場合:

チェンジ( "見つける"、 "負け"、3)

私は何を受け取るべきではありませんが、代わりに私が受け取る:

['find', 'fine', 'line'] 

私はかなりよく分かりませんどのようにこれを行うには、どのような助けをいただければ幸いです。代わりに、すぐに再帰を返す

+0

サイドノート:不正な入力がすべきは、 'print"エラーではなく例外をトリガーします。 「なし」を返す。 –

+1

'def'行を4つのスペースでインデントするだけでコードをフォーマットしないでください。これは間違ったPythonコードを生成します。コードをハイライト表示し、エディットボックスの上部に表示される '{}'ボタンを押します。自動的にコードをインデントします。 – senderle

+0

ありがとう、私は気づいていませんでした。 – Unknown

答えて

2

、次のように進みます。

y = changeling(word,target,steps-1) 
if y : 
    return [x] + y 
else: 
    return None 

あなたの元のバージョンとの問題は、追加、で計算されたものは、次の手順を返すということです。あなたが連鎖し、あなたのプログラムの出力Noneを継続するための良い言葉が見つからない場合は、このようにあなたが文を返すには、有効なステップのリストだけに相当し、有効な手順+なしのリスト、で構成されています。ここでは、次のステップが達成できるかどうかを最初に確認します。返さない場合は、Noneのみ返します。はいの場合は、すべてを返します。

+0

これがプログラムの正確な変化の仕方を説明できますか?私はそれが動作することを認識している、私はちょうど理由を見ることができません。 – Unknown

+0

@NicholasDavison答えを更新しました。 – Zenon

0

あなたは、あなたの最後のreturn文を変更する必要があります。

私はので、ここで擬似コードです、あなたに正確なコードを与えるためにpythonで十分に堪能ではないよ:

subReturnValue = changeling(word, target, steps-1) 

if(subReturnValue.length == (steps-1)) then 
    return [x] + subReturnValue 
else 
    return [] 
関連する問題