Quantcast
Channel: Bashタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 2802

シェルスクリプトでフィボナッチ数を求める

$
0
0
はじめに 以前に【Oracle】PL/SQLでフィボナッチ数を求めるという記事を書いたので、同様にシェルスクリプト(Bash)でもフィボナッチ数を求めるスクリプトが作れるのではと思い、実際に試してみることにしました。 使用した環境 paiza.ioのBashエディタ画面を利用して、作成したスクリプトを実行しました。 無料で実行環境を使わせてもらえるのはありがたいですね。 作成したコード 最初はPL/SQLと同様に再帰させてフィボナッチ数を求めようと思っていましたが、 シェルスクリプトは戻り値が存在しない ということに気が付いて断念しました。 日常的にシェルスクリプトを使っている方には当たり前の話かもしれませんが、たまにしか使わない自分には衝撃的でした... そこで、アルゴリズムで天地の差: 計算の手間の「再帰も配列も使わないフィボナッチ数の計算」という章に書かれているRubyのコードを参考にして、再起を使わない方法でフィボナッチ数を求めることにしました。 なお、参考にしたページでは第2項目~第n項目までのフィボナッチ数を求めていますが、そのアルゴリズムを少し変えて第0項目~第n項目までのフィボナッチ数を求めるコードを作成しました。 ただし第n項目の「n」が大きくなると処理に時間がかかるため、「0~100までの間のフィボナッチ数を求める」という形に修正しました。 calc_fibonacci.sh #!/bin/bash # 再帰も配列も使わず、0~100までの間のフィボナッチ数を返す。 # http://www.aoni.waseda.jp/ichiji/2014/ruby-01/ruby-14-1.html result=0 # フィボナッチ数の計算結果 p1_result=0 # 1つ前のフィボナッチ数の計算結果 i=0 # ループのカウンタ変数 while true do if [ $i -eq 0 ]; then result=0 elif [ $i -eq 1 ]; then result=1 p1_result=1 else p2_result=$p1_result # 1つ前の計算結果を2つ前の計算結果に代入 p1_result=$result # 直前の計算結果を1つ前の計算結果に代入 result=$(($p1_result+p2_result)) fi if [ $result -gt 100 ]; then # 計算結果が100より大きい時は処理を抜ける。 break fi echo $result i=$((i + 1)) done 実行結果 実行結果 0 1 2 3 5 8 13 21 34 55 89 参考URL アルゴリズムで天地の差: 計算の手間

Viewing all articles
Browse latest Browse all 2802

Trending Articles