バグを見つけるためのPythonコード(8)
**前の期間のコード設計要件:**再帰的アルゴリズムを使用して5を見つけます!
コードは次のように表示されます:
バグを見つけるためにコードを注意深く読んでください!
**正解:**合計3つのバグがあります。 (回答時間については、正解の数を確認してください)
(1)ifステートメントは条件付き判断ステートメントであり、もちろん、割り当てステートメントではなく比較式である必要があるため、if j = 0を次のように変更する必要があります。ifj== 0。
(2)2番目の問題は、print()メソッドの明らかな使用法です。Python3バージョンには括弧()が必要です。
(3)3番目のバグ、私たちは良いチャットをしなければなりません:
再帰的アルゴリズムに精通していない学生の場合、関数が正確に何を返す必要があるかを理解する必要がありますか?それは間違いなく単なる変数ではありません。この例では、j変数は関数の正式なパラメーターのようです。関数を呼び出すには、実際のパラメーターを指定して、正式なパラメーターjに値を割り当てる必要があります。したがって、フローに沿って進むと、returnjはまさに関数が必要とするもののようです。私の友人、私はあなたに親切に思い出させなければなりません、これはスモークスクリーンです!
すみません!それはどうあるべきですか?
まず、もう1つの基本的な常識は、正式なパラメーターjに割り当てられる実際のパラメーターはjという名前の変数である必要はないということです。したがって、jを返す必要があるかどうかは、ここでの再帰アルゴリズムが何を返すかによって異なります。
再帰的アルゴリズムを実装するには、戻り値に2つの前提が必要であると述べました。1つは、アルゴリズム(算術式)の結果であり、このアルゴリズムには、関数の呼び出しが再度含まれています。第二に、この結果は動的です。再帰的反復操作が完了すると、それは特定の値になり、判断条件をトリガーし、関数を繰り返し呼び出さなくなります。
OK、それは明らかです。戻った後は、jではなくcである必要があります。ほとんどの場合、cは因子演算の式であり、j == 0になるまで関数への別の呼び出しが含まれます。条件分岐ステートメントが確立され、c = 1が取得されます。このとき、fact(0)の代わりにreturn cが実行されるため、5 * 4 * 3 * 2 * 1の因数分解式が完全に計算され、その結果はそのままです。 cに値を割り当て、それを関数の最終的な戻り値として返します。
次の図は、再帰アルゴリズムの再帰ロジックを示しています。参照できます。
したがって、正しいコードは次のようになります。
**コメント:**昨日のバグを見つける主な目的:
(1)再帰的アルゴリズムを学びます。
(2)if条件付き判断ステートメントを統合します。
(3)Python3でのprint()の使用法をもう一度思い出してください。
上記のコードを読むのが難しい学生は、Gaoduから送信された「Introductionto Python」、またはGaoduWebサイトの「IntroductiontoPython」ビデオコースを読んで学習してください。
この問題のコード設計要件:
5人が一緒に座って、5人目は何歳ですか?彼は4人目より2歳年上だと言った。 4人目の年齢を聞いたところ、3人目より2歳年上だったそうです。第三者に聞いて、彼は二人目より2歳年上だと言います。 2人目に聞いて、彼は1人目より2歳年上だと言います。最後に、私は最初の人に尋ねました、彼は彼が10歳であると言いました。 5人目は何歳ですか?
**再帰的アルゴリズム計算を使用する必要があります。 ****
OK、これは再帰的アルゴリズムのレビューケースであり、再帰的アルゴリズムの学習を統合するのに非常に役立ちます。
コードは次のように表示されます:
もちろん、上記のコードはまだバグがあります。見つけて、メッセージに投稿して、明日答えてください。
**正解は明日発表されます。 ****
注意:従来、すべてのコードはPythpn3に基づいています。
Recommended Posts