统计每个月兔子的总数
1 | 题目描述 |
1 | 输入描述: |
这道题贼简单,就是一个斐波那契数列递归实现:
F(N)=F(N-1)+F(N-2)
F(1)=1
F(2)=11
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16def Feibo(N):
if N==1:
return 1
elif N==2:
return 1
else:
return Feibo(N-1)+Feibo(N-2)
while True:
try:
n=int(raw_input())
r=Feibo(n)
print r
except:
break
放苹果
1 | 题目描述 |
这道题想到递归的确有点绕,一位博主的解题思路:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20放苹果分为两种情况,一种是有盘子为空,一种是每个盘子上都有苹果。
令(m,n)表示将m个苹果放入n个盘子中的摆放方法总数。
1.假设有一个盘子为空,则(m,n)问题转化为将m个苹果放在n-1个盘子上,即求得(m,n-1)即可
2.假设所有盘子都装有苹果,则每个盘子上至少有一个苹果,即最多剩下m-n个苹果,问题转化为将m-n个苹果放到n个盘子上
即求(m-n,n)
递归还需要确定递归基准条件
m=1或n=1时,只有一种摆法
m=0时,苹果不存在,就不存在摆法-->0
综上所述:
(m,n)=(m,n-1)+(m-n,n);
(m,1)=(1,n)=1,m>0,n>0
(0,n)=0
还有边界问题需要考虑
但是这么做还是有个致命的问题!!!
针对第二个条件的时候,m-n等于0的时候,根本不存在递归的问题了,只能放一种,但是(0,n)的递归限制,会在(m,n)=(m,n-1)+(m-n,n);对最后一项变为0!!!!就比原来的少了!!!!
So 现在给出精确的解法:
(0,n)=0
(1,n)=(m,1)=(1,1)=1 m>0,n>0
(m,n)=(m,n-1)+(m-n,n) m-n>0,n>0
(m,n)=(m,n-1)+1 m-n=0
1 | def putApple(M,N): |