A. python中解 斐波那契數遞推公式不能理解
第一張圖
def f(n):
if n==1 or n==2:
return 1
else:
return f(n-1)+f(n-2)
b=f(6)
print(b)
源代碼(注意源代碼的縮進)
第二張圖是階乘的遞歸程序,其過程是
fact(5)=5*fact(4)=5*4*fact(3)=5*4*3*fact(2)=5*4*3*2*fact(1)=5*4*3*2*1*fact(0)
因為fact(0)=1,所以上式=5*4*3*2*1*1=120
詳細解釋,
因為n等於5所以執行else語句返回5*fact(4)
n等於4所以執行else語句返回4*fact(3)
n等於3所以執行else語句返回3*fact(2)
n等於2所以執行else語句返回2*fact(1)
n等於1所以執行else語句返回1*fact(0)
n等於0所以執行if語句返回1
然後反向回歸
fact(1)=1*1
fact(2)=2*1*1
fact(3)=3*2*1*1
fact(4)=4*3*2*1*1
fact(5)=5*4*3*2*1*1=120
B. Python編程題求助
該答案為組合數學中著名的卡特蘭數,其通式為C(2n,n)-C(2n,n-1)
這里採用遞推關系求解,即動態規劃的方法
設n對父子有d[n]種出場策略,注意初值d[0]=1
因為每個孩子前面必有一個父親與之對應
對於i對父子,遍歷第j個孩子,該孩子前面有j-1個孩子,對應d[j-1]種出場策略
後面有i-j個孩子,對應d[i-j]種出場策略,則d[i]+=d[j-1]*d[i-j],最終d[n]即為所求
python代碼如下:
n = int(input())
d = [0] * (n+1)
d[0] = 1
for i in range(n+1):
for j in range(i+1):
d[i] += d[j-1] * d[i-j]
print(d[n])
運行結果如下:
望採納~