Differences between revisions 3 and 5 (spanning 2 versions)
Revision 3 as of 2018-10-10 14:15:34
Size: 897
Comment:
Revision 5 as of 2018-10-12 06:58:11
Size: 4420
Comment:
Deletions are marked like this. Additions are marked like this.
Line 11: Line 11:
<<TableOfContents>>
[[../BP_005a/Contents|*]]
Line 12: Line 14:
 ||<|2>演習(5) ||<|2>基本課題(5a)||<|2>【関数定義】||<|1>n番目のフィボナッチ数を返す関数|| <<Include(../BP_005a/Contents)>>
[[../BP_005a/Contents|*]]
----

||<|2>演習(5) ||<|2>基本課題(5a)||<|2>【関数定義】||<|1>n番目の[[https://ja.wikipedia.org/wiki/フィボナッチ数|フィボナッチ数]]を返す関数||
Line 17: Line 23:
 * 解答は基本的に,下記 行です.
  * 問題の回答としては,これだけで十分です.
  * 自分自身のソフトウェア開発のためには,できるだけコメントをつける習慣をもってください.
 * 解答は基本的に,下記の[[https://ja.wikipedia.org/wiki/フィボナッチ数|フィボナッチ数]]を返す関数です.
  * 再帰関数で定義する(関数rec_fibonacci())のが普通ですが,繰り返し(関数fibonacci())でも書くことができます
   * 後日,リストについて学んだら,フィボナッチ数列を作ること,再帰関数のメモ化(memorize)についても取り上げましょう
  * [[https://ja.wikipedia.org/wiki/フィボナッチ数|フィボナッチ数]]の定義は,[[https://ja.wikipedia.org/wiki/フィボナッチ数|wikipedia]]を見てください.

 * 再帰版の関数rec_fibonacci()
Line 22: Line 31:
def rec_fibonacci( n ):
    if n == 0:
        return( 0 )
    elif n == 1:
        return( 1 )
    else:
        return( rec_fibonacci( n - 2 ) + rec_fibonacci( n - 1 ) )
Line 25: Line 40:
 *  * 繰り返し版の関数fibonacci()
Line 28: Line 43:
def fibonacci( n ):
    fib = int()
    fib_minus_2 = 0
    fib_minus_1 = 1
    if n == 0:
        fib = fib_minus_2
    elif n == 1:
        fib = fib_minus_1
    else:
        for i in range( 2, n+1 ):
            fib = fib_minus_2 + fib_minus_1
            fib_minus_2 = fib_minus_1
            fib_minus_1 = fib
    return( fib )
}}}

{{{#!highlight python
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# ==============================================================================
# * Copyright (c) 2018 IIJIMA, Tadashi
# * (IIJIMA Laboratory, Dept. of Science and Technology, Keio University).
# ==============================================================================
# ソフトウェア工学[02] 基本課題[02]-(005a) BP_02_005a_fibonacci_number.py
# BP(Basic Problem) 02-005a: 【関数定義】 
# 2018-10-03 飯島 正 (iijima@ae.keio.ac.jp)
# ==============================================================================
# ===== 【関数定義】 =====
# memo化(memorizationはリストを扱ってから → 後日)
def rec_fibonacci( n ):
    if n == 0:
        return( 0 )
    elif n == 1:
        return( 1 )
    else:
        return( rec_fibonacci( n - 2 ) + rec_fibonacci( n - 1 ) )
# ==============================================================================
# ===== 【関数定義】 =====
def fibonacci( n ):
    fib = int()
    fib_minus_2 = 0
    fib_minus_1 = 1
    if n == 0:
        fib = fib_minus_2
    elif n == 1:
        fib = fib_minus_1
    else:
        for i in range( 2, n+1 ):
            fib = fib_minus_2 + fib_minus_1
            fib_minus_2 = fib_minus_1
            fib_minus_1 = fib
    return( fib )
# ==============================================================================
# ===== 【メイン・プログラム】  =====
# ----- オープニングメッセージ -----
print( "n番目のフィボナッチ数と,n番目までのフィボナッチ数列を求める: " )

# ----- パラメータの入力 -----
n = int( input( " nを入力してください>>> " ) )

# ----- 結果の表示 ----
print( " ( 再帰版) n番目のフィボナッチ数は", rec_fibonacci( n ) )
print( " (非再帰版) n番目のフィボナッチ数は", fibonacci( n ) )

print( " ( 再帰版) n番目までのフィボナッチ数列は ", end="" )
for i in range( n+ 1 ):
    print( rec_fibonacci( i ), end=", " )
print()

print( " (非再帰版) n番目までのフィボナッチ数列は ", end="" )
for i in range( n + 1 ):
    print( fibonacci( i ), end=", " )
# ==============================================================================

基本問題(5)

*


概要

[ 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 ]

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

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


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

*

*

  • 演習(5)

    基本課題(5a)

    【関数定義】

    n番目のフィボナッチ数を返す関数

    BP_02_005a_fibonacci_number.py

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

    • 再帰関数で定義する(関数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 )

   1 #!/usr/bin/env python
   2 # -*- coding: utf-8 -*-
   3 # ==============================================================================
   4 # * Copyright (c) 2018 IIJIMA, Tadashi
   5 # *       (IIJIMA Laboratory, Dept. of Science and Technology, Keio University).
   6 # ==============================================================================
   7 # ソフトウェア工学[02] 基本課題[02]-(005a)  BP_02_005a_fibonacci_number.py
   8 # BP(Basic Problem) 02-005a: 【関数定義】 
   9 #        2018-10-03 飯島 正 (iijima@ae.keio.ac.jp)
  10 # ==============================================================================
  11 # ===== 【関数定義】 ===== 
  12 # memo化(memorizationはリストを扱ってから → 後日)
  13 def rec_fibonacci( n ):
  14     if n == 0:
  15         return( 0 )
  16     elif n == 1:
  17         return( 1 )
  18     else:
  19         return( rec_fibonacci( n - 2 ) + rec_fibonacci( n - 1 ) )
  20 # ==============================================================================
  21 # ===== 【関数定義】 ===== 
  22 def fibonacci( n ):
  23     fib = int()
  24     fib_minus_2 = 0
  25     fib_minus_1 = 1
  26     if n == 0:
  27         fib = fib_minus_2
  28     elif n == 1: 
  29         fib = fib_minus_1
  30     else:
  31         for i in range( 2, n+1 ):
  32             fib = fib_minus_2 + fib_minus_1
  33             fib_minus_2 = fib_minus_1
  34             fib_minus_1 = fib
  35     return( fib )
  36 # ==============================================================================
  37 # ===== 【メイン・プログラム】  =====
  38 # ----- オープニングメッセージ -----
  39 print( "n番目のフィボナッチ数と,n番目までのフィボナッチ数列を求める: " )
  40 
  41 # ----- パラメータの入力 -----
  42 n = int( input( "  nを入力してください>>> " ) )
  43 
  44 # ----- 結果の表示 ----
  45 print( "  (  再帰版) n番目のフィボナッチ数は", rec_fibonacci( n ) )
  46 print( "  (非再帰版) n番目のフィボナッチ数は", fibonacci( n ) )
  47 
  48 print( "  (  再帰版) n番目までのフィボナッチ数列は ", end="" )
  49 for i in range(  n+ 1 ):
  50     print( rec_fibonacci( i ), end=", " )
  51 print()
  52 
  53 print( "  (非再帰版) n番目までのフィボナッチ数列は ", end="" )
  54 for i in range( n + 1 ):
  55     print( fibonacci( i ), end=", "  )
  56 # ==============================================================================


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