爬梯菜单
然后:
f(1) = 1
f(2) = 2
右n & gt2、有:
F(n) =(先有一个网格,然后n-1网格的方法数)+(先有两个网格,然后n-2网格的方法数)
也就是
f(n) = f(n-1) + f(n-2)
所以f(n)是斐波那契数列的n+1项?
# include & ltstdio.h & gt
长纤维(整数)
{ if (n == 1 || n == 2)返回1;
返回光纤(n - 1) +光纤(n-2);
}
主()
{ int n;
scanf("%d ",& ampn);
printf("%ld\n ",fib(n+1));
返回0;
}
/*
练习9:上楼梯★★
上楼梯,可以一个一个上楼梯,也可以两个两个来。
也可以隔一两步上,甚至一次k步。
问题是,如果最后一步数是n,每一步可以上到1到k步,
你走了多少路?
如果n = 5,k = 2,是的。
1,1,1,1,1
2,1,1,1
1,2,1,1
1,1,2,1
1,1,1,2
2,2,1
2,1,2
1,2,2
共8种。
输入步数n (1
5 2
5 3
输出:
八
13
难度:容易
*/
# include & ltstdio.h & gt
# include & ltstring.h & gt
int d[31][31];
int dfs(int left,int k)
{
int I;
if(d[left][k]!=-1)返回d[left][k];
如果(!左)返回1;
d[left][k]= 0;
for(I = 1;我& lt=((left & lt;k)?左:k);i++)
d[left][k]+=dfs(left-i,k);
return d[左][k];
}
int main(void)
{
int n,k;
memset(d,-1,sizeof(d));
while(scanf("%d%d ",& ampn & amp;k)!=EOF)
printf("%d\n ",dfs(n,k));
返回0;
}