tn-soccerball
@tn-soccerball

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

フィボナッチ数列の最大値とその項数

python

def fib(n):
  a, b = 0, 1 #aに0,bに1を代入
  cnt = 1 #ループカウンタの初期化
  while cnt <= n:
    a, b= b, a+b
    cnt = cnt + 1
  return a #aを戻り値として返す

x =100
i = ......
.....
....
  print()
  print()

問題は、x以下のフィボナッチ数で最大の数とその最大の数の項数を求める問題で.......の部分に何かコードを書くのですがよく分からないので助けてください。
*文系なのでできるだけ難しい数学の説明とかはなしで解説してくれるとうれしいです。

また、ヒントとして
「例えば,フィボナッチ数を第0項から順に求めるといった繰り返し処理を,フィボナッチ数がxを超えるまで(フィボナッチ数がx以下である間)繰り返す処理を行うことで,所望の実行結果が得られます.説明動画で作成した関数fibを利用するのであれば,fibの戻り値 fib(i) が x を超えるまで(戻り値 fib(i) が x 以下である間)繰り返す処理を行うことになります.while文の条件式に,fib(i) と x を比較した条件式を記述すれば,このような繰り返し処理が実現できます. 」

とあって「fibの戻り値 fib(i)」のfibの戻り値ってどうしてfib(i)なのですか?
return aのaじゃないのでしょうか??

0

1Answer

コードはこうだと思います。

def fib(n):
  a, b = 0, 1 #aに0,bに1を代入
  cnt = 1 #ループカウンタの初期化
  while cnt <= n:
    a, b = b, a + b
    cnt = cnt + 1
  return a #aを戻り値として返す

x = 100 # 最大値
i = 0   # 項数
while fib(i) <= x: # 項数iのフィボナッチ数が最大値を超えていない場合、下記を実行する
    print('項数:' + str(i)) # 項数を出力
    print('フィボナッチ数:' + str(fib(i))) # フィボナッチ数を出力
    i += 1 # 項数を上げる

実行結果。100以下で最大のフィボナッチ数と項数が最後に表示されます。

項数:0
フィボナッチ数:0
項数:1
フィボナッチ数:1
項数:2
フィボナッチ数:1
項数:3
フィボナッチ数:2
項数:4
フィボナッチ数:3
項数:5
フィボナッチ数:5
項数:6
フィボナッチ数:8
項数:7
フィボナッチ数:13
項数:8
フィボナッチ数:21
項数:9
フィボナッチ数:34
項数:10
フィボナッチ数:55
項数:11
フィボナッチ数:89

とあって「fibの戻り値 fib(i)」のfibの戻り値ってどうしてfib(i)なのですか?
return aのaじゃないのでしょうか??

aもfib(i)も関数fibの戻り値と言えると思いますが、aは関数内で言う戻り値、fib(i)は関数外で言う戻り値だと思います。

0Like

Comments

  1. @tn-soccerball

    Questioner

    コメントありがとうございます。
    aが関数内の戻り値と言うことは理解できたのですが,fib(i)がどうして関数外で言う戻り値になるのかまだ理解できないのですが、ご説明可能でしょうか?
  2. 私は出題者ではないので真意を測りかねますが、出題者はヒントとして下記のような事が言いたかったのではないかと推測します。

    説明動画で作成した関数fibを利用するのであれば,fib(i)の戻り値が x を超えるまで(fib(i)の戻り値が x 以下である間)繰り返す処理を行うことになります.
    while文の条件式に,fib(i)の戻り値と x を比較した条件式を記述すれば,このような繰り返し処理が実現できます.

Your answer might help someone💌