裏 RjpWiki

Julia ときどき R, Python によるコンピュータプログラム,コンピュータ・サイエンス,統計学

トリボナッチ数列

2019年07月22日 | ブログラミング

再帰関数と非再帰関数」,「事象が連続発生するまでの試行回数」にも出てきたトリボナッチ数列だが,

「n 階段があるとき,1段昇る,2段昇る,3段昇るのどれかを選択して昇るとき何通りの昇り方があるか」という設問がされることもある。

よく,「アルゴリズムをわかりやすく表現できる再帰プログラム」の例としても出てくるのが以下のプログラム。フィボナッチ数列の拡張ということだ。

def step(n):
    if n == 0:
        return 1
    if n < 0:
        return 0
    return step(n-1) + step(n-2) + step(n-3)

でも,これは相当スタックも喰うし,実行時間も馬鹿にならない。

import time
s = time.time()
for i in range(30):
    print(i, step(i))
print(time.time()-s)

30 項計算するのに 46秒も掛かる。

これを再帰ではないプログラムにすると,(これもフィボナッチ数列の非再帰的求め方のプログラムだが)

s = time.time()
a, b, c, = 1, 1, 2
for i in range(3, 30):
    a , b, c = b, c, a + b + c
    print(i, c)
print(time.time()-s)

当たり前だが,わずか 0.0018 秒で終わる。

 

コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« 事象が連続発生するまでの試... | トップ | 土用ウナギの日 »
最新の画像もっと見る

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。

ブログラミング」カテゴリの最新記事