2

私はRubyとプログラミング全般を学んでいます。私は最初のプロジェクトとしてブラックジャック プログラムに取り組んでいます。すべての新しいハンドを開始するために呼び出されるメソッド start_game があります。メソッドが呼び出され、ハンドが終了すると再びメソッド自体が呼び出されます。これはこれを行う正しい方法ですか?これは、メソッドが呼び出されるたびに無限にメモリを割り当てるように思えます。これがガベージ コレクションで処理されるかどうかはわかりません。おそらくこれを行うためのより良い方法があるように感じますが、それを理解することはできません。前もって感謝します!

4

1 に答える 1

1

このようにメソッドを再帰的に呼び出すと、最終的にスタックがオーバーフローします (十分な数のハンドがプレイされた場合、その可能性は不明です)。

ただし、末尾呼び出しの最適化によってこれが発生しないようにします。これは、再帰的なメソッド呼び出しに適用できる最適化の 1 つの形式です。再帰的な呼び出しは、メソッドを実行するたびに常に最後に呼び出されます。これは基本的に再帰呼び出しをループに変換するため、毎回スタックに追加することはありません。

ただし、この質問によると、Ruby の末尾呼び出しの最適化に頼ることはできません。だから私はあなたのコードを少し書き直してstart_game、ループで呼び出され、いくつかの条件をテストして続行するかどうかを決定します。

于 2012-04-17T09:08:39.757 に答える