系列
- Python: 學習系列之一:Python能做什麼
- Python: 學習系列之二:基礎介紹(int/float/string/range/list/tuple/dict/set)
- Python: 學習系列之三:基礎介紹二
- Python: 學習系列之四:有趣的經典數學問題
- Python: 學習系列之五:類、繼承、多態、封裝
- Python: 學習系列之六:對象的內置函數及類對象的特殊方法
- Python: 學習系列之七:模塊、PIPY及Anaconda
- Python: 學習系列之八:異常的處理
- Python: 學習系列之九:文件讀寫
- Python: 學習系列之十:函數
遞歸函數
"""
遞歸的算法,必須滿足兩個條件:
1. 原問題與新問題有相同的形式
2. 遞歸就是一種循環,必須有一個遞歸出口退出循環
"""
"""
n! = 1 * 2 * 3 * .... * n = (n-1)! * n 且 1!=1
即fac(n) = fac(n-1)* n
"""
def fac(n):
if n == 1:
return 1
return fac(n-1) * n
print(fac(5)) # 120
"""
斐波那切數列
F0 = 0, F1 = 1, Fn = F(n-1) + F(n-2)(n>=2)
"""
def fib(n):
if n == 0:
return 0
if n == 1:
return 1
return fib(n-1) + fib(n-2)
print(fib(6)) # 8 , 0,1,2,3,5
舍罕王賞麥
"""
印度的舍罕王重賞宰相:一個棋盤,第一格賞一粒麥,第二格賞兩粒,三格賞4粒,每一格比前一格多一倍,總共64格
"""
"""
F1 = 1, F2 = F1* 2, F3 = F2* 2... F64 = F63 * 2
F = F1 + F2 + F3 + ... + F64
"""
def shehanwang(n):
t = 1
s = 1
for _ in range(2, n+1):
t *= 2
s += t
return s
print(shehanwang(64)) # 18446744073709551615
# 另一種思路, 每一格是2的n-1次方
L = [2 ** i for i in range(0, 64)]
print(sum(L)) # 18446744073709551615
不重複的三位數
"""
統計0-9這10個數字可以組成多少個不重複的三位數
"""
"""
根據排列組合,去除0開頭的有:A[3,10] -A[2,9] = 10 * 9 * 8 - 9 * 8 =648
"""
def buchongfu():
counter = 0
for a in range(1, 10):
for b in range(0, 10):
for c in range(0, 10):
if(c != b and b != a and a != c):
counter += 1
return counter
print(buchongfu()) # 648
角谷猜想
"""
給出任何自然數,反覆進行如下計算
(1) 若爲奇數,則乘以3+1
(2)若爲偶數,則除以2
最後總可以得到運算結果爲1
"""
def jiaogu(n):
nc = n
while nc != 1:
nc = nc * 3+1 if nc % 2 else nc / 2
print('%d符合角谷猜想' % n)
jiaogu(50) # 50符合角谷猜想