Norecur

to norecur :size
      forward / :size 3
      right 90
      forward / :size 3
      left 135
      forward / * * :size cos 45 2 3
      right 90
      forward / * * :size cos 45 2 3
      left 135
      forward / :size 3
      right 90
      forward / :size 3
end
         
to norecur2 :size
      norecur / :size 3
      right 90
      norecur / :size 3
      left 135
      norecur / * * :size cos 45 2 3
      right 90
      norecur / * * :size cos 45 2 3
      left 135
      norecur / :size 3
      right 90
      norecur / :size 3
end
         
to norecur3 :size
      norecur2 / :size 3
      right 90
      norecur2 / :size 3
      left 135
      norecur2 / * * :size cos 45 2 3
      right 90
      norecur2 / * * :size cos 45 2 3
      left 135
      norecur2 / :size 3
      right 90
      norecur2 / :size 3
end
         
to norecur4 :size
      norecur3 / :size 3
      right 90
      norecur3 / :size 3
      left 135
      norecur3 / * * :size cos 45 2 3
      right 90
      norecur3 / * * :size cos 45 2 3
      left 135
      norecur3 / :size 3
      right 90
      norecur3 / :size 3
end
         
to norecur5 :size
      norecur4 / :size 3
      right 90
      norecur4 / :size 3
      left 135
      norecur4 / * * :size cos 45 2 3
      right 90
      norecur4 / * * :size cos 45 2 3
      left 135
      norecur4 / :size 3
      right 90
      norecur4 / :size 3
end

norecur 100 から norecur5 100
再帰手続きを説明する前に、非再帰の方法で描く自己相似図形です。
実際に線分を描いているのは、norecurだけですね。norecur2norecur5までは、同じ定義を積み重ねているだけです。
更に、定義を積み重ねていく事も出来ますが、描画時間が掛かりすぎるのでやりません。:-)
しかし、この自己相似図形と言う物は、面白いですね。
どこの線分を取っても、自分の分身です。金太郎飴状態ですね。

Recur

to recur :depth :size
    if :depth > 0 [
      recur - :depth 1 (/ :size 3)
      right 90
      recur - :depth 1 (/ :size 3)
      left 135
      recur - :depth 1 (/ * * :size cos 45 2 3)
      right 90
      recur - :depth 1 (/ * * :size cos 45 2 3)
      left 135
      recur - :depth 1 (/ :size 3)
      right 90
      recur - :depth 1 (/ :size 3)
    ] [
      forward :size]
end

 norecurは、非再帰でしたが、今度は再帰手続にしてみたのが、このプログラムです。
適当に引数を指定して実行して下さい。recur 5 100で、norecur5 100と同じ図形が描けます。
自分自身を呼びだし、depthが0になったら線分を引いています。そして自分自身に戻って行きます。なんとも奇妙な感じですね。
しかし、考え方はnorecurと一緒ですのでソースリストを見較べれば判るでしょう。
この方法だと、幾らでも再帰レベルを深く出来るので、depthを20でも100でも指定できます。
#よほど暇でないかぎりは、しない方が無難でしょうけど。

RecurTest

to recurTest :l :size
    local "t
         
    make "t (* :size 1.3333)
    
    repeat - :l 1 [make "t (* :t 1.3333)]
    make "t (/ :t 2)
    penup
    home
    right 90
    forward :t
    right 90
    forward / :t 1.72
    right 90
    pendown
    repeat 3 [recur :l :size right 120]
end



recurTest 5 60

recurを、角度を変えながら3回呼び出して描かれた図形です。
位置決めは、ウィンドウの真ん中あたりに来る様に、、、、まあテキトーです。:-D

なんだか痛々しいテトラポットの様な物が描けてしまいました。