题目:
假设你正在爬楼梯。需要n阶你才能到达楼顶。
每次你可以爬1或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
思路:
我开始是写了一个函数计算爬一层和爬二层的个数,之后排列求和,但是超范围了,后来改了范围,但是结果不对,,,,
也不知道为啥,
后来看了结果越看越眼熟,这不是斐波那契数列吗?
之后就会嘞
结果代码:
int climbStairs(int n) {
//int n,j;
int sum=0;
//scanf("%d",&n);
int f_1=1;
int f_2=2;
int f_n=0;
//int f_n_1=0;
if(n==0||n==1||n==2)
{
return n;
}
for(int i=1;i<=n-2;i++)
{
f_n=f_1+f_2;
//f_n_1=f_n+f_2;
f_1=f_2;
f_2=f_n;
}
return f_n;
// return 0;
}
再接再励吧!!!!!!!
脑袋空空。
如果有更好的方案,请赐教,感谢!
补充一个递归法:
递归法思想:
同斐波那契数列一致,就是用递归写斐波那契,最后输出
见代码:
int *func(int n,int* f_n,int f_1,int f_2)
{
--n;
if(n == -1)
return n;
f_n[n] = f_1+f_2;
f_1 = f_2;
f_2 = f_n[n];
func(n,f_n,f_1,f_2);
return f_n;
}
int climbStairs(int n) {
int f_n[n];
func(n,f_n,0,1);
return f_n[0];
}
希望今天的自己比昨天更好!
加油啦!!