質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

2回答

481閲覧

再帰的関数についてです

ttoo

総合スコア126

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

1クリップ

投稿2019/09/16 04:08

https://qiita.com/WestRiver/items/

上記URLより、

def fibonacci(num): if num <= 2: return 1 return fibonacci(num - 2) + fibonacci(num - 1) index = int(input("何番目の数値を求めますか?:")) result = fibonacci(index) print(result)

上記コードの

if num <= 2: return 1 return fibonacci(num - 2) + fibonacci(num - 1)

がどうして、フィボナッチ数列として足されていくのかが
根本からわからないので、わかりやすく教えていただきたいです泣泣泣

宜しくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

引数numに数値を与えた場合、関数に何が返すかを考えればわかりやすくなると思います。

num = 0 : fibonacci(0) = 1
num = 1 : fibonacci(1) = 1
num = 2 : fibonacci(2) = 1
num = 3 : fibonacci(3) = fibonacci(1) + fibonacci(2) = 1 + 1 = 2
num = 4 : fibonacci(4) = fibonacci(2) + fibonacci(3) = 1 + 2 = 3
num = 5 : fibonacci(5) = fibonacci(3) + fibonacci(4) = 2 + 3 = 5
num = 6 : fibonacci(6) = fibonacci(4) + fibonacci(5) = 3 + 5 = 8
num = 7 : fibonacci(7) = fibonacci(5) + fibonacci(6) = 5 + 8 = 13
num = 8 : fibonacci(8) = fibonacci(6) + fibonacci(7) = 8 + 13 = 21

※num=0時は0を返すべきだとおもいますが・・・

投稿2019/09/16 04:32

nomuken

総合スコア1627

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

「直前2つを足していく」というフィボナッチ数列の定義をコードに起こしたものですが、最初は「直前2つ」が取れないので1に固定している、というだけです。

何が理解できないのか、もう少し具体的に書いていただけませんでしょうか。

投稿2019/09/16 04:15

maisumakun

総合スコア145201

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ttoo

2019/09/16 04:24

例えばnum=5だとして、そのあとのreturn の動きが分からないです。 「直前の二つが1なのでnumが1、0になれば1になる」というのはわかるのですが。 フィボナッチ数列がどういうものかは理解しているのですが、このpythoコードにおいての、流れが分からないです。泣
maisumakun

2019/09/16 04:27

難しく考える必要はありません。このコードでは引数にしかアクセスしていませんので、returnに書いてあるfibonacciの呼び出しは「たまたま同じ名前のメソッドを呼び出している」と考えてください。 再帰呼び出ししても実行ごとにnumは別々な変数となりますので、再帰呼び出ししたことで思わぬ動作になることはありません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問