1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

動画で得た再帰関数の知識をまとめる回

Last updated at Posted at 2022-03-05

参考にした動画
https://youtu.be/vYquumk4nWw
英語の動画だけど、すごい聞き取りやすいし分かりやすいね
この動画の例ではフィボナッチ数列を使ってたから、フィボナッチ数列を求めるための再帰関数書いていくよー。
まずは簡単なやつ

practice.py
def fib(n):
    if n == 1 or n == 2:
        result = 1
    else:
        result = fib(n-1) + fib(n-2)
    return result

例えばn=5の時はまず、n=3とn=4に分岐して、そこからn=3⇨(n=2,n=1)となっていって、n=4⇨((n=3⇨n=2,n=1),n=2)みたいにn=2かn=1まで分裂を繰り返していく、分裂が完全に完了したら分裂の数分、数が足されていって、最終的にn=5の値5が戻り値として戻ってくる。
しかし、毎回毎回一からやっていったら計算量がバカにならないので、初めてでた数字はリストに追加していくようにするともっと良くできる。

practice.py
def fib(n, memo):
    if memo[n] != None:
        return memo[n]
    if n == 1 or n == 2:
        result = 1
    else:
        result = fib(n-1) + fib(n-2)
    memo[n] = result
    return result

今回は作らないけれど、本番では問題や状況にあったmemoリストを作ります。そして最初に既にその数字が求められていたのなら、その数字を返します。もし初めての数字ならば一個前のコードと同じ処理をしてnの数字を求め出してリストに格納していきます。上の動画によると計算量がO(2**n)からO(n)まで減るらしいので、memoを用意しておく効果は絶大です!

1
1
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?