こんにちは、Ruby歴半年のプログラマです。
基本的なアルゴリズムを習得したいと考えて、『Pythonではじめるアルゴリズム入門 伝統的なアルゴリズムで学ぶ定石と計算量』を読んでいます。
本記事は『Pythonではじめるアルゴリズム入門』のPythonのフィボナッチ数列のサンプルコードをRubyで実装しました。
より良いコードの書き方などありましたら教えてもらえると嬉しいです。
環境
$ sw_vers
ProductName: Mac OS X
ProductVersion: 10.15.4
BuildVersion: 19E287
$ ruby -v
ruby 2.7.0p0 (2019-12-25 revision 647ee6f091)[x86_64-darwin19]
Rubyで再帰を使ったフィボナッチ数列
deffibonacci(input)memo={1=>1,2=>1}returnmemo[input]ifmemo.has_key?(input)memo[input]=fibonacci(input-2)+fibonacci(input-1)end# -> 55
例外条件(メモにすでにキーが含まれているか)を確認して、例外条件に合致すればそのバリューを返す、ガード節を定義しています。
returnmemo[input]ifmemo.has_key?(input)
Rubyでループを使ったフィボナッチ数列
deffibonacci(input)(2...input).inject([1,1]){|memo,number|memo<<(memo[number-2]+memo[number-1])}endpfibonacci(10)# -> [1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
初期値を用意して畳み込みの演算ができるEnumerable#injectを使っています。