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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Pythonista

Pythonistaは、iOS上でPythonプログラミングができる開発アプリです。さらに、Pythonの関数・変数などを自動で補完する便利なコードエディタや、PythonスクリプトをiOS上で多様な形で機能させる各種機能も内包しています。

再帰

情報工学における再帰とは、プログラムのあるメソッドの処理上で自身のメソッドが再び呼び出されている処理の事をいいます。

Q&A

3回答

656閲覧

pythonのreturn文、再帰処理に関する質問(フィボナッチ数列)

tetorisesu

総合スコア0

Pythonista

Pythonistaは、iOS上でPythonプログラミングができる開発アプリです。さらに、Pythonの関数・変数などを自動で補完する便利なコードエディタや、PythonスクリプトをiOS上で多様な形で機能させる各種機能も内包しています。

再帰

情報工学における再帰とは、プログラムのあるメソッドの処理上で自身のメソッドが再び呼び出されている処理の事をいいます。

0グッド

0クリップ

投稿2023/02/16 14:11

前提

フィボナッチ数列を用いてretutn文について学習しています。
下記のコードは、n番目の項の数字がprintされるもので、講師が書いたものです。

質問ですが、
なぜ4を入力すると3が出力されるのかが、わかりません。

nに4を入力した場合
fib(4 - 1) + fib(4 - 2)=fib(5)
そして、これを再帰処理し
fib(5 - 1) + fib(5 - 2)=fib(7)...
となるのが、私のreturn文に対する理解度での限界でした。
おそらく8行目の計算方法か、再帰処理の部分に間違いがあるのだと思います。

どのようなアルゴリズムで3という出力がなされるのかを教えていただきたいです。

とても初歩的な質問だとは思いますが、よろしくお願いします。

該当のソースコード

Python

1# n番目のフィボナッチ数を返す関数 2def fib(n): 3 # nが0または1の場合はそのまま返す 4 if n == 0 or n == 1: 5 return n 6 # nが2以上の場合は再帰的に計算する 7 else: 8 return fib(n - 1) + fib(n - 2) 9 10# 例: 10番目のフィボナッチ数を求める 11print(fib(4)) #実行すると3が出力されます

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

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

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

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

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

meg_

2023/02/16 14:20

> 講師が書いたものです。 その講師の方には質問しなかったのですか?
guest

回答3

0

fib(4) の実行過程をツリー状に図示すると以下の様になります。

tree

1 fib(4) 2 / \ 3 fib(3) fib(2) 4 / \ / \ 5 fib(2) fib(1) fib(1) fib(0) 6 / \ 7fib(1) fib(0)

最終的な結果は以下の通りです。

formula

1fib(1) + fib(0) + fib(1) + fib(1) + fib(0) == 1 + 0 + 1 + 1 + 0 = 3

投稿2023/02/16 15:02

melian

総合スコア19798

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

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

0

fib(4 - 1) + fib(4 - 2)=fib(5)

なぜ fib(3) + fib(2) のことを fib(5) と表しているのですか。その考えが間違っています。

投稿2023/02/16 14:42

arcxor

総合スコア2859

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

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

0

そして、これを再帰処理し
fib(5 - 1) + fib(5 - 2)=fib(7)

いいえ、fib(4)に対して計算するのはfib(4-1)とfib(4-2)です

投稿2023/02/16 14:36

ozwk

総合スコア13521

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問