• WEB

Swiftとバグバグ〜再帰と反復〜

  • エイチ
    エイチ システムちーむ
  • このエントリーをはてなブックマークに追加
Swiftとバグバグ〜再帰と反復〜

AppleはiOSやOS Xのアプリを開発するための
新しいプログラミング言語としてSwiftを公開しました。

今回はSwiftを用いた再帰と反復の簡単なプログラムを
日々大量のバグを生み出し続けるWebプログラマー「エイチ」と
バグが大好物なエイチのペット「バグバグ」とともに実装してみます。

バグバグ 「・・・」

エイチ  「バグバグ ねぇ バグバグ 起きなよ
      これから Swiftの簡単なソースコードを作っていくよ」

バグバグ 「!!」

エイチ  「今日は階乗を計算する関数を2パターン作ってみるよ」


n! = n * (n - 1) * (n - 2) * ・・・ * 1

エイチ  「ひとつは再帰的な関数だよ
      もうひとつは反復的な関数だよだよ」


再帰的な関数 factorialRecursion(n)
反復的な関数 factorialIteration(n)

エイチ  「再帰的な関数と実行例はこんな感じかな」

カチャカチャッ タンッ!


func factorialRecursion(n:Int) -> Int {
  if n == 1 {
    return 1
  } else {
    return (n * factorialRecursion(n - 1))
  }
}
println(factorialRecursion(6))
720

エイチ  「反復的な関数と実行例はこんな感じかな」

カチャカチャッ タンッタンッ!


func factorialIteration(n:Int) -> Int {
  return factorialIterationStep(1, 1, n)
}
func factorialIterationStep(product:Int, counter:Int, maxCounter:Int) -> Int {
  if counter > maxCounter {
    return product
  } else {
    return factorialIterationStep(
      product * counter,
      counter + 1,
      maxCounter
    )
  }
}
println(factorialIteration(6))
720

エイチ  「よし 完成だ!
      バグバグ この2つのプロセスの違いがわかるかい?」

エイチ  「再帰的な関数はこうなるぞ」


factorialRecursion(6)
(6 * factorialRecursion(5))
(6 * (5 * factorialRecursion(4)))
(6 * (5 * (4 * factorialRecursion(3))))
(6 * (5 * (4 * (3 * factorialRecursion(2)))))
(6 * (5 * (4 * (3 * (2 * factorialRecursion(1))))))
(6 * (5 * (4 * (3 * (2 * 1)))))
(6 * (5 * (4 * (3 * 2))))
(6 * (5 * (4 * 6)))
(6 * (5 * 24))
(6 * 120)
720

エイチ  「反復的な関数はこうなるぞ」


factorialIteration(6)
factorialIterationStep(1, 1, 6)
factorialIterationStep(1, 2, 6)
factorialIterationStep(2, 3, 6)
factorialIterationStep(6, 4, 6)
factorialIterationStep(24, 5, 6)
factorialIterationStep(120, 6, 6)
factorialIterationStep(720, 7, 6)
720

エイチ  「違いがわかったかな?」

エイチ  「さあ バグバグ ソースコード 全部お食べ」

バグバグ 「バグバグ バグバグ バグバグ」

エイチ  「for文がなくてもループ出来るなんて
      プログラムってすごいね     」

エイチ  「美味しかったろう バグバグ」

このエントリーをはてなブックマークに追加

エイチが最近書いた記事

WRITERS POSTS もっと見る

他にもこんな記事が読まれています!

  • WEB
  • マーケティング
  • サーバー・ネットワーク
  • ライフスタイル
  • お知らせ