を理解することができませんこれは私の最初の質問です、私はあなたの一部が答えに時間を見つけることを願っています。この再帰的な亀のpythonコード
私の目標は、ピタゴラスの木をコードするために、カメのモジュールを使用してpythonスクリプトを書くことです。
私は何日も過ごしましたが、本当にある時点を過ぎて進まなかったので、私はオンラインで自分を助けました。私は、私が欲しいものを行うコードを見つけましたが、コードの非常に少ない線できました:
import turtle
t = turtle.Pen()
LIMIT =11
SCALAR = 0.5 * (2 ** 0.5)
def drawTree(size, depth):
drawSquare(size)
if depth + 1 <= LIMIT:
t.left(90)
t.forward(size)
t.right(45)
drawTree(size * SCALAR, depth + 1)
t.forward(size * SCALAR)
t.right(90)
drawTree(size * SCALAR, depth + 1)
t.left(90)
t.backward(size * SCALAR)
t.left(45)
t.backward(size)
t.right(90)
def drawSquare(sideLength):
for i in range(4):
t.forward(sideLength)
t.left(90)
t.up(); t.goto(-100, -200); t.down()
drawTree(170.0, 0)
は、だから私は、第二および「IF」の第三段落を除いて、ほとんどのコードを理解する:なぜ彼らはありませんこれまで実行される?関数がそれ自身を繰り返し続けていると、その点は決して正常に到達しません! 私は本当にここで簡単に何かが欠けていると確信しています。私はあなたの質問を理解していただきたいと思います:)もう一度ありがとう!
。最初の 'drawTree'関数の深度は0なので' if'文は真で、 'drawTree'は' 1'の深さで呼び出されます。これは 'drawTree'が終わるまで真実です深さ '11 'で呼び出され、' if'文が偽であり、 'drawTree'への呼び出しがなくなり、深さ' 10'で前方に 't.forward ...' –
しかし、深さが11の場合、if文が偽になると、関数を完全に終了してはいけませんか?とにかくあなたの入力に感謝します! – zeldamia
サイモンが言ったこと。 'drawTree'は自分自身を永遠に呼び出すことはないので、最終的に再帰呼び出し_do_の後の文が実行されます。深度== LIMITの再帰呼び出しが戻ると、制御は前の呼び出しに戻ります。深度== LIMIT-1です。あなたは、 'if'の直下に' print( '' * depth、depth、size)という 'LIMIT = 4'(あるいは他の小さな値)でコードを実行しようとします。 –