资源限制
时间限制:1.0s 内存限制:512.0MB
问题描述
有一长度为N(1<=N<=10)的地板,给定两种不同瓷砖:一种长度为1,另一种长度为2,数目不限。要将这个长度为N的地板铺满,一共有多少种不同的铺法?
例如,长度为4的地面一共有如下5种铺法:
4=1+1+1+1
4=2+1+1
4=1+2+1
4=1+1+2
4=2+2
编程用递归的方法求解上述问题。
输入格式
只有一个数N,代表地板的长度
输出格式
输出一个数,代表所有不同的瓷砖铺放方法的总数
样例输入
4
样例输出
5
分析:
解决问题的关键是找到递归的公式,我们可以把2的数目看成递归的突破点,4里面最多的2的数目就是2个。
种类的通式如下:(假如是4)
值得注意的是,C(n,k)的计算方法:
AC代码:
while True:
try:
n = int(input())
if n == 1:
print(1)
break
def mul(a): #阶乘函数
ans = 1
for i in range(1,a+1):
ans *= i
return ans
def Rec(n,k):
if n == k:
return 2 #一开始和最后都是1
else:
return mul(n)//(mul(k)*mul(n-k)) + Rec(n-1,k+1)
print(Rec(n-1,1))
except:
break
编程小白记录成长
来源:CSDN
作者:干啥啥不会~
链接:https://blog.csdn.net/bianxia123456/article/details/104516966