目的
ruby のコードを実際に書いてみよう.
今回は第 V 弾.
お題:Fibonacci数列
fib(n) = fib(n-1)+fib(n-2)
0 1 1 2 3 5 8 13 21 ...
を recursion (再帰) で求める.
(ここにある課題)
解説
以下のような関数 fib をつくる
- 関数名 : fib
- 入力 : n (項の番号)
- 出力 : 第 n 項の値
今回は TDD (Test Driven Development : テスト駆動開発) を意識して解説を書く.
解説を書こうと思ったけど, 先程リンク先にある内容と同じになるので割愛. (細かな解説はリンク先を見よう.)
一応, TDD の作業概要を以下に書いておく.
- テストを作る
- red : エラーを出す
- green : エラーをなくす (green)
- refactoring : code を綺麗にする (refactoring)
まとめ
TDD で良い感じに Fibonacci 数列の code を書けた. 素晴らしい.
今回書いた code の全体
最終的にこうなった. ファイル名は "fibonacci.rb".
require './assert_equal_final'
def fib(n)
return 0 if n==0
return 1 if n==1
return fib(n-1) + fib(n-2)
end
if $PROGRAM_NAME == __FILE__
[[0,0],[1,1],[2,1],[3,2],[4,3],
[5,5],[6,8],[7,13],[8,21],[9,34]].each do |index, expected|
assert_equal(expected, fib(index))
end
end
参考資料
チャート式ruby-V(Recursive Fibonacci)
- source ~/Lecture/multiscale_simulation/grad_members_20f/members/gagagagazelle/docs/c5_fibonacci.org