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])
运行结果如下:
望采纳~