Size: 897
Comment:
|
Size: 4303
Comment:
|
Deletions are marked like this. | Additions are marked like this. |
Line 12: | Line 12: |
||<|2>演習(5) ||<|2>基本課題(5a)||<|2>【関数定義】||<|1>n番目のフィボナッチ数を返す関数|| | ||<|2>演習(5) ||<|2>基本課題(5a)||<|2>【関数定義】||<|1>n番目の[[https://ja.wikipedia.org/wiki/フィボナッチ数|フィボナッチ数]]を返す関数|| |
Line 17: | Line 17: |
* 解答は基本的に,下記 行です. * 問題の回答としては,これだけで十分です. * 自分自身のソフトウェア開発のためには,できるだけコメントをつける習慣をもってください. |
* 解答は基本的に,下記の[[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 25: |
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 34: |
* | * 繰り返し版の関数fibonacci() |
Line 28: | Line 37: |
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)
- 繰り返し版の関数fibonacci()
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 # ==============================================================================