您的位置:首页 > 职场人生

Java中斐波那契数列相关面试题

2017-03-05 18:57 316 查看
斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波纳契数列以如下被以递归的方法定义:F(0)=1,F(1)=1, F(n)=F(n-1)+F(n-2)(n>=2,n∈N*)

题目描述1

大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。n<=38

非递归实现方式:

public static int fibonacci(int n) {
int result = 0;
int a1 = 0;
int a2 = 1;
if (n < 0 || n > 38) {
System.out.println("please correct number");
return -1;
}
if (n == 0) {
return 0;
} else if (n == 1) {
return 1;
} else {
for (int i = 2; i <= n; i++) {
result = a1 + a2;
a1 = a2;
a2 = result;
}
}
return result;
}
递归实现方式:

static int result = 0;

public static int fibonacciByRecursive(int n) {
if (n == 0) {
return 0;
} else if (n == 1) {
return 1;
} else {
result = fibonacciByRecursive(n - 1) + fibonacciByRecursive(n - 2);
}
return result;
}


题目描述2
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
先简单推理分析下

n=1,solution =1

n=2,solution=2

n=3,solution=3

n=4,solution=5

f(n)=f(n-1)+f(n-2),和斐波那契数列 类似只是f(1)=1,f(2)=2,只需要把上面的稍微改动下即可

public int JumpFloor(int target) {
//f(n)=f(n-1)+f(n-2)
int result = 0,a1 =1,a2=2;
if(target ==1){
return 1;
}else if(target ==2){
return 2;
}else{
for(int i=3;i<=target;i++){
result=a1+a2;
a1 =a2;
a2 =result;

}
return result;
}
}
递归解法类似,就不在贴代码了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: