基本問題(5)

[ edit ]

*


概要

[ edit ]

$$ フィボナッチ数列: f_0=0,\ f_1=1,\ f_{n+2}=f_{n+1}+f_{n} $$

$$ フィボナッチ数列: \left\{ \begin{array}{ll} f_0 =0 & \\ f_1 =1 & \\ f_{n+2} = f_{n} + f_{n+1} & (n >= 0) \end{array} \right. $$

*


ヒント

この課題で使うPythonの機能 (学習のヒント)

[ edit ]

  • この課題で使うPythonの機能 (学習のヒント)...
    • 関数定義

    • print()関数

      • キーワードパラメータsepは区切り文字列,キーワードパラメータendは行末文字列です.

この課題の解き方 (問題解決のヒント)

[ edit ]

*


実行例

[ edit ]

  • 実行例(1) ... クリックすると拡大します

fig-01

*


プログラム例: 本質的な部分 (授業中に順次公開します)

[ edit ]

  • 解答は基本的に,下記のフィボナッチ数を返す関数です.

    • 再帰関数で定義する(関数rec_fibonacci())のが普通ですが,繰り返し(関数fibonacci())でも書くことができます
      • 後日,リストについて学んだら,フィボナッチ数列を作ること,再帰関数のメモ化(memorize)についても取り上げましょう
    • フィボナッチ数の定義は,wikipediaを見てください.

  • 再帰版の関数rec_fibonacci()

   1 def rec_fibonacci( n ):
   2     if n == 0:
   3         return( 0 )
   4     elif n == 1:
   5         return( 1 )
   6     else:
   7         return( rec_fibonacci( n - 2 ) + rec_fibonacci( n - 1 ) )
  • 繰り返し版の関数fibonacci()

   1 def fibonacci( n ):
   2     fib = int()
   3     fib_minus_2 = 0 # 
   4     fib_minus_1 = 1 # 
   5     if n == 0:
   6         fib = fib_minus_2
   7     elif n == 1: 
   8         fib = fib_minus_1
   9     else:
  10         for i in range( 2, n+1 ):
  11             fib = fib_minus_2 + fib_minus_1
  12             fib_minus_2 = fib_minus_1
  13             fib_minus_1 = fib
  14     return( fib )
*


高度な話題 (授業中,もしくは授業後に順次公開します)

[ edit ]

  • 高度な話題へのリンク: 授業の流れを阻害しないように別ページにします

    • (後日の回の授業内容にはなる可能性がありますが,この回の授業内容には含めません).
    • ラムダ式と条件式(条件分岐演算子; 三項演算子)に関するものです.


プログラム例: 配布コード (授業中に順次公開します)

*

*

SoftEng: Python/Prog/Practice/Basic/02/BP_005a (last edited 2018-10-28 14:44:22 by TadashiIijima)