再帰

[id:mimpoo:20060124#p2]
再帰に苦しんでいる人を発見。
再帰は「場合わけ」だと思えばわかりやすいんですよね。あるいは「数学的帰納法」とか。
例えば、Hello!をn回出力するプログラム…

手続き hello n について
 n=0の時 → 終わり
 n=kの時 → Helloを出力し、hello (k-1)を実行

Schemeにすれば、こんな感じかな?

(define (hello n)
  (if (= n 0)
      #t
      (begin
        (display "Hello!")
        (newline)
        (hello (- n 1)))))

単純なループだと、冗長な気がしますけど、ループの条件が複雑になると、場合わけの方が考えやすいことが多かったりします。