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

来源:互联网 发布:外星人学物理2淘宝网 编辑:程序博客网 时间:2024/05/16 15:12

斐波那契数列(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;        }     }
递归解法类似,就不在贴代码了。

1 0
原创粉丝点击