思路:
fibn=fibone+fibtwo;
fibone=fibtwo;
fibtwo=fibn;
public class Solution {
public int Fibonacci(int n) {
int fibone=0;
int fibtwo=1;
int fibn=0;
if(n==0)
return fibone;
if(n==1)
return fibtwo;
for(int i=2;i<=n;i++)
{
fibn=fibone+fibtwo;
fibone=fibtwo;
fibtwo=fibn;
}
return fibn;
}
}
相似题目:
1、一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。
public class Solution {
public int JumpFloor(int target) {
int fone=1;
int ftwo=2;
int fn=0;
if(target<=0)
{
return 0;
}
if(target==1)
{
return fone;
}
if(target==2)
{
return ftwo;
}
for(int i=3;i<=target;i++)
{
fn=fone+ftwo;
fone=ftwo;
ftwo=fn;
}
return fn;
}
}
2、一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
思路:
// 假设:f(n)表示:n个台阶第一次1,2,...n阶的跳法数;
// 若第一次跳了1阶,则还剩n-1阶,
// 假设:f(n-1)表示:n-1个台阶第一次1,2,...n-1阶的跳法数;
// 若第一次跳了2阶,则还剩n-2阶,
// 假设:f(n-2)表示:n-1个台阶第一次1,2,...n-2阶的跳法数;
// ...
// 把所以可能的情况(第一次可能跳1,2,...,n阶)加起来:
// 可以求出:f(n) = f(n-1) + f(n-2) + ... + f(1)
// 递归:f(n-1) = f(n-2) + ... + f(1)
// 可以求出:f(n) = 2*f(n-1)
public class Solution {
public int JumpFloorII(int target) {
int a = 1, b = 0;
if (target <= 0) {
return 0;
} else if (target == 1) {
return 1;
} else {
for (int i = 2; i <= target; i++) {
b = 2 * a;
a = b;
}
return b;
}
}
}
3、我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
public class Solution {
public int RectCover(int target) {
int fone=1;
int ftwo=2;
int fn=0;
if(target<=0)
{
return 0;
}
if(target==1)
{
return fone;
}
if(target==2)
{
return ftwo;
}
for(int i=3;i<=target;i++)
{
fn=fone+ftwo;
fone=ftwo;
ftwo=fn;
}
return fn;
}
}