Size: 4303
Comment:
|
← Revision 8 as of 2018-10-28 14:44:22 ⇥
Size: 430
Comment:
|
Deletions are marked like this. | Additions are marked like this. |
Line 5: | Line 5: |
#acl AdminGroup:read,write,delete,revert,admin TadashiIijima:read,write,delete,revert,admin IijimaStaffGroup: IijimaGroup: IijimaObogGroup: GuestGroup: Known: All: | #acl AdminGroup:read,write,delete,revert,admin TadashiIijima:read,write,delete,revert,admin IijimaStaffGroup: IijimaGroup: IijimaObogGroup: GuestGroup: Known: All:read |
Line 11: | Line 11: |
[ <<Action(edit)>> ] <<TableOfContents>> [[../BP_005a/Contents|*]] |
|
Line 12: | Line 15: |
||<|2>演習(5) ||<|2>基本課題(5a)||<|2>【関数定義】||<|1>n番目の[[https://ja.wikipedia.org/wiki/フィボナッチ数|フィボナッチ数]]を返す関数|| ||<|1> [[../BP_005a|BP_02_005a_fibonacci_number.py|target="_blank"]]|| ||<-4> || * 解答は基本的に,下記の[[https://ja.wikipedia.org/wiki/フィボナッチ数|フィボナッチ数]]を返す関数です. * 再帰関数で定義する(関数rec_fibonacci())のが普通ですが,繰り返し(関数fibonacci())でも書くことができます * 後日,リストについて学んだら,フィボナッチ数列を作ること,再帰関数のメモ化(memorize)についても取り上げましょう * [[https://ja.wikipedia.org/wiki/フィボナッチ数|フィボナッチ数]]の定義は,[[https://ja.wikipedia.org/wiki/フィボナッチ数|wikipedia]]を見てください. * 再帰版の関数rec_fibonacci() {{{#!highlight python def rec_fibonacci( n ): if n == 0: return( 0 ) elif n == 1: return( 1 ) else: return( rec_fibonacci( n - 2 ) + rec_fibonacci( n - 1 ) ) }}} * 繰り返し版の関数fibonacci() {{{#!highlight python 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=", " ) # ============================================================================== }}} |
<<Include(../BP_005a/Contents)>> [[../BP_005a/Contents|*]] |
基本問題(5)
[ edit ]
Contents
概要
[ edit ]
演習(5)
基本課題(5a)
【関数定義】
n番目のフィボナッチ数を返す関数
$$ フィボナッチ数列: 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 ]
この課題の解き方 (問題解決のヒント)
[ edit ]
- この課題の解き方 (問題解決のヒント) ....
- 再帰関数で定義する方が簡単です.
- 再帰関数 rec_fibonacci()を定義してください.
第01回基本課題(4-1d)の 階乗を計算する 再帰関数 rec_factorial()を参考にしてください.
実行例
*
プログラム例: 本質的な部分 (授業中に順次公開します)
*
高度な話題 (授業中,もしくは授業後に順次公開します)
[ edit ]
⇒ 高度な話題へのリンク: 授業の流れを阻害しないように別ページにします
- (後日の回の授業内容にはなる可能性がありますが,この回の授業内容には含めません).
- ラムダ式と条件式(条件分岐演算子; 三項演算子)に関するものです.
プログラム例: 配布コード (授業中に順次公開します)