再帰とカメのグラフィックを使用して図形を描く必要があります。タートルグラフィックス再帰
私はルーパーのほうが多く、めったに再帰を使用していないので、ここで役立つのはうれしいでしょう。どこから始めてもわからない。
形状は涼しく見えるだけです。任意のパラメータ化なし
再帰とカメのグラフィックを使用して図形を描く必要があります。タートルグラフィックス再帰
私はルーパーのほうが多く、めったに再帰を使用していないので、ここで役立つのはうれしいでしょう。どこから始めてもわからない。
形状は涼しく見えるだけです。任意のパラメータ化なし
は、ここでは初め:あなたは再帰関数を作成する場合
import time
from turtle import *
def recurse(n):
if n>0:
left(10)
forward(5)
recurse(n-1)
recurse(20)
time.sleep(5)
、あなたは効果的にあなたのプログラムがいくつかの点で終了する保証を停止基準を持っている必要があります。
あなたの答えをお寄せいただきありがとうございます。私は今、正しい道にいると思う。 –
@RyanNacker、あなたの投票を投げて答えをマークすることを忘れないでください。あなたの投稿は他の人には有用でなければなりません。 – jlandercy
Oh man!どのような楽しい問題:)
あなたが自己宣言された 'ルーパー'として、私はあなたがループするように再帰について考えます。
ループでは、for
ループでは、for
ループ条件が満たされるまでループの本体を実行します。今、再帰は非常に似ています。関数のパラメータが再帰的なケースに当たらなくなるまで、関数を呼び出し続けます。彼らはベースケースにヒットし、代わりに再帰が構築できる値を返します。
このように再帰を考えて、正方形を描く方法を考えてみましょう。コードのどの部分が繰り返されるか(つまり、同じことをしようとしているループの本体に何があるか)を特定する必要があります。この繰り返しをいつ停止するかを特定します(ループが終了するタイミングはどうすればわかりますか)。
四角形を描いている間、私は少なくとも4回繰り返される2つの主要な事柄を考えることができます。カメは一定のステップ数だけ進み、カメは90度(向きによっては270度)になります。これは、再帰的なケースで詳しく説明します。
ここで、基本ケースについて考えてみましょう。まあ、正方形には4辺があることを知っています。そのため、カメが4辺を描いた後、それを止めたいと思っています。
最後に、関数宣言と、これらの2つの部分、再帰的ケースと基本ケースがどのように関係しているのかを考えてみましょう。関数の宣言は(Pythonで)以下の形態をとることができる。彼らはカメを有効にしてくださいどのように定義して、どこまでそれが必要徒歩」として
def draw_square_recursive(turn_deg=90, side_len, sides=4):
"""
Function draws a square with turtle graphics recursively
:param turn_deg: an int, the number of degrees a turtle should turn
:param side_len: an int, the length of a side of the square
:param sides: an int, the number of sides in our square
"""
turn_deg
とside_len
は、私たちの再帰的な場合のために重要となります。 sides
は興味深いパラメータであり、繰り返し続行するか停止するかを指定するために使用できます。 sides
から1を引くと、面を描くたびに、sides == 0
の基底ケースが繰り返されるのを止める必要があることがわかります。
def draw_square_recursive(turn_deg=90, side_len, sides=4):
"""
Function draws a square with turtle graphics recursively
:param turn_deg: an int, the number of degrees a turtle should turn
:param side_len: an int, the length of a side of the square
:param sides: an int, the number of sides in our square
"""
if sides == 0:
# base case!
else:
# recursive case!
この関数はdraw_square_recursive
の名前が、それができることに注意してください: 我々は再び再発する私たちの関数を呼び出すたびしたがって、我々のようにそれを呼び出します、draw_square_recursive(side_len, sides-1):
全体的に、関数の構造は次のようになります。他の形にもっと一般化することができます。どうやって見える?
ごめんなさい。P
私はあなたのアプローチが好きです – jlandercy
もっと答えよりも社説が、このような再帰;それがお役に立てば幸いです。より良い反復として書かれ
def recurse(n):
if n>0:
left(10)
forward(5)
recurse(n-1)
:
for n in range(2):
left(10)
forward(5)
がどのように「と尋ねる人々に似ています再帰を使ってリスト内の要素の数を数えますか? "再帰を使用して正方形を描く同上。
私は再帰について学ぶことを理解していますが、迷子になるのは、再帰によって素晴らしいことが起こり、プログラムが遅くなる時間があるということです。
import sys
from turtle import Turtle, Screen
def hilbert_curve(n, turtle, angle=90):
if n <= 0:
return
turtle.left(angle)
hilbert_curve(n - 1, turtle, -angle)
turtle.forward(1)
turtle.right(angle)
hilbert_curve(n - 1, turtle, angle)
turtle.forward(1)
hilbert_curve(n - 1, turtle, angle)
turtle.right(angle)
turtle.forward(1)
hilbert_curve(n - 1, turtle, -angle)
turtle.left(angle)
depth = int(sys.argv[1])
size = 2 ** depth
screen = Screen()
screen.setworldcoordinates(0, 0, size, size)
yertle = Turtle('turtle')
yertle.speed('fastest')
yertle.penup()
yertle.goto(0.5, 0.5)
yertle.pendown()
hilbert_curve(depth, yertle)
yertle.hideturtle()
screen.exitonclick()
USAGE
% python3 hilbert.py 5
(PARTIAL)OUTPUT
私が選んでいないよ:フラクタルは、再帰と不思議のように何かする機会です他の答え、私はあなたが大きなと思うことを示唆している(または少なくとも "クールに見える必要があります。」
SEへようこそ、これまでに何を試みましたか? – jlandercy
どこから始めたらいいのか分からないので、誰かが私を助けてくれるなら、始まりはすばらしいでしょう。 –
http://www.kidscoderepo.com/python.htmlをご覧ください。あなたのクールな要求を満たすためには良いポイントです – jlandercy