Pythonのフィボナッチ説明する行アプリケーション
起源
また、列/ラビットシリーズの黄金数として知られているフィボナッチ列、;フィボナッチが発見されたウサギの繁殖問題の起源は(記事のリンク端の特定の分析を参照)、URL少し長いが、内容は非常にハッハッハ、詳述されています。
フィボナッチ数は、列1のような数、1、2、3、5、8、13、21、34、55、89、144、233、...という列の最も重要な特徴を指す:第から出発します、それぞれの値は、最初の2つの和に等しいです。
コードの実装
次のように簡単なコードの実装は次のとおりです。
#函数定义
def feibo(n):
a,b = 0,1
# while循环的终止条件为 b>= n
while b < n:
# end = ' '表示不换行,输出结果以一个空格隔开,此处可自定义
print(b, end=' ')
a,b = b, a + b
# 下行语句表示:等while循环结束后换行
print()
#函数调用
feibo(10)
次のように実行結果は以下のとおりです。
1 1 2 3 5 8
そのノートコードの意味は、n = 10、上記nで表され、10未満のフィボナッチ範囲は、フィボナッチシーケンス番号値がないフィボナッチ数は10の値であることを示しています。
アプリケーション:大きな矩形をカバーする小さな四角形
アプリケーション1:大きな矩形をカバーする2×1横方向または垂直方向の小さな長方形であってもよいです。nは2×1の小さな長方形によって大きな矩形2と重複することなく覆われているだろう×N、塗布法の種類の総数は?使用してください再帰的を達成するために?
1アプリケーションのアイデア分析
1 | 2 |
---|---|
3 | 4 |
12は、ここで使用されている(34)は、小さな長方形の小矩形の、13(24)1(長さ)×2(幅)×1(幅)2(長さ)を表します。
N = 2で、テーブル、すなわち、二つの小さな四角形の2×1は、2×2のカバレッジと重複することなく大きな矩形です。
N =列の数は、いくつかのカバーのR =結果を配置しています。
1 | 2 | 3 | 4 | 5 | 6 |
---|---|---|---|---|---|
7 | 8 | 9 | 10 | 11 | 12 |
;分析は、n = 0 ,, R&LT = 0、得ることができる
N- =時間1は、R = 1;
N- =時間2は、R = 2;
N- =時刻3、R = 3;
シンプル分析2列カバレッジ結果の2種類があり、(2 17/28)および(78分の12本の2本のライン)
3がある場合、カバレッジ結果の三種類があり;(13/28/39 3)及び(2列17/23 / 89)及び(二列1 12/78/39)
再分析、n = 4の場合、二つの状況:
(1)時間とき、すなわち直立カラムユニット、ここで、n = 3、すなわち3 = R&LTの3つの結果;
(2)水平に配置されたとき、すなわち時間の単位で、残り2つのn = 2の結果、即ち、R = 2
n = 4の場合したがって、ケース3 + 2 = 5種で覆われていてもよいです。
:式次のようにというように、要約することができるF(N)= F(N - 1)+ F(N-2-) 。
1アプリケーション・コードの実装
したがって、次のように実装が質問を再帰的にするコード:
def rectConvert1(n):
if n == 0:
return 0
elif n == 1:
return 1
elif n == 2:
return 2
else:
return rectConvert1(n-1) + rectConvert1(n-2)
print(rectConvert1(6))
次のように実行結果は以下のとおりです。
13
なお:6つのセルのリストである、上述した符号列の数n(nはアイテムの値ということも理解されたい)、カバレッジの13種類(F(6)= F(5)+ F( 4)= F(4)+ F(3)+ F(3)+ F(2)= F(3)+ F(2)+ F(3)+ F(3)+ F(2)= 3F( 3)+ 2F(2)= 9 + 4 = 13)。
アプリケーション2:非再帰的な方法で最初の質問を実装
2アプリケーションのアイデアを分析
非再帰的に実施される場合、他にだけコードブロックを修正し、リストに格納されている列の値フィボナッチ数は、n番目の項目の値を取ります。
2アプリケーションコードを達成するために
def rectConvert2(n):
if n == 0:
return 0
elif n == 1:
return 1
elif n == 2:
return 2
else:
res = [0,1,2]
while len(res) <= n:
# 计算当前列表的倒数第一个值和第二个值的和
res.append(res[-1]+res[-2])
return res[n]
print(rectConvert2(6))
実行結果コードを以下に示します。
13
一般的な問題はなく:出産後の最初の3ヶ月からウサギのペアが毎月ウサギのペアを1つ生まれているウサギが死んでいない場合、月は、ウサギの一組を出産した後、バニーは、第三の月に育ちます、月額ウサギの合計数はどのくらいに聞いて?(具体的な答えが遅れて明らかにしました)
https://mp.weixin.qq.com/s?src=11×tamp=1581424112&ver=2152&signature=pzB-FaTI5sthz3EeISxwOsHKg-wxKYsp4KInQSAZHTgB066mHxW84REKg7PNXn6QlMJ9p04j1y2*HTPUX5eRt4GwPhbhqg7qwUvX7YmLbF28qh-bEDPqDAhjy4ekc9fH&new=1