题目一:写一个函数,输入n,求斐波那契数列(Fibonacci)数列的第n项,斐波那契数列的定义如下: f(n) = {0  n = 0;  1   n = 1;  f(n-1)+f(n-2)  n>1}

题目二:一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。

即求斐波那契数列的f(n)的结果。

在青蛙跳台阶的问题中,如果把条件改成:一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。。。。。它也可以跳上n级,此时该青蛙跳上一个n级的台阶总共有多少种跳法?我们用数学归纳可以证明f(n)=2的n-1次方。

解法一fibonacci_1(效率低下),解法二fibonacci_2(时间复杂度为n)

package com.yyq;

/**
* Created by Administrator on 2015/9/10.
*/
public class Fibonacci {
public static long fibonacci_1(int n){
if(n <= 0) return 0;
if(n == 1) return 1;
return fibonacci_1(n - 1) + fibonacci_1( n - 2); } public static long fibonacci_2(int n){
if(n <= 0) return 0;
int result[] = {0,1};
long fibOne = result[0];
long fibTwo = result[1];
long temp = 0;
if(n <2){
return result[n];
}
for(int i = 2; i <= n; i++) {
temp = fibOne + fibTwo;
fibOne = fibTwo;
fibTwo = temp;
}
return temp;
} // ====================测试代码====================
public static void Test(int n, int expected)
{
if(fibonacci_1(n) == expected)
System.out.println("Test for "+n+" in solution1 passed.");
else
System.out.println("Test for " + n + " in solution1 fail."); if(fibonacci_2(n) == expected)
System.out.println("Test for " + n + " in solution2 passed.");
else
System.out.println("Test for " + n + " in solution2 fail.");
} public static void main(String[] args){
Test(0, 0);
Test(1, 1);
Test(2, 1);
Test(3, 2);
Test(4, 3);
Test(5, 5);
Test(6, 8);
Test(7, 13);
Test(8, 21);
Test(9, 34);
Test(10, 55);
Test(40, 102334155);
}
},
 
输出结果:
Test for 0 in solution1 passed.
Test for 0 in solution2 passed.
Test for 1 in solution1 passed.
Test for 1 in solution2 passed.
Test for 2 in solution1 passed.
Test for 2 in solution2 passed.
Test for 3 in solution1 passed.
Test for 3 in solution2 passed.
Test for 4 in solution1 passed.
Test for 4 in solution2 passed.
Test for 5 in solution1 passed.
Test for 5 in solution2 passed.
Test for 6 in solution1 passed.
Test for 6 in solution2 passed.
Test for 7 in solution1 passed.
Test for 7 in solution2 passed.
Test for 8 in solution1 passed.
Test for 8 in solution2 passed.
Test for 9 in solution1 passed.
Test for 9 in solution2 passed.
Test for 10 in solution1 passed.
Test for 10 in solution2 passed.
Test for 40 in solution1 passed.
Test for 40 in solution2 passed.

P73、面试题9:斐波那契数列的更多相关文章

  1. 【剑指offer】面试题 10. 斐波那契数列

    面试题 10. 斐波那契数列 题目一:求斐波那契数列的第n项 题目描述:求斐波拉契数列的第n项 写出一个函数,输入n,求斐波拉契(Fibonacci)数列的第n项.斐波拉契数列定义如下: C++ 实现 ...

  2. 剑指offer编程题Java实现——面试题9斐波那契数列

    题目:写一个函数,输入n,求斐波那契数列的第n项. package Solution; /** * 剑指offer面试题9:斐波那契数列 * 题目:写一个函数,输入n,求斐波那契数列的第n项. * 0 ...

  3. 剑指offer-面试题9.斐波拉契数列

    题目一:写一个函数,输入n,求斐波拉契数列的第n项. 斐波拉契数列的定义如下: { n=; f(n)={ n=; { f(n-)+f(n-) n>; 斐波拉契问题很明显我们会想到用递归来解决: ...

  4. 《剑指offer》面试题9 斐波那契数列 Java版

    书中方法一:递归,这种方法效率不高,因为可能会有很多重复计算. public long calculate(int n){ if(n<=0){ return 0; } if(n == 1){ r ...

  5. 【剑指Offer】面试题10- I. 斐波那契数列

    题目 写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项.斐波那契数列的定义如下: F(0) = 0,   F(1) = 1 F(N) = F(N - 1) + F(N - 2) ...

  6. 《剑指offer》面试题10- I. 斐波那契数列

    问题描述 写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项.斐波那契数列的定义如下: F(0) = 0,   F(1) = 1 F(N) = F(N - 1) + F(N - ...

  7. Java面试题:小白不得不懂的斐波那契数列

    很长一段时间里,我都非常疑惑:“我写的技术文章不差啊,有内容的同时还很有趣,不至于每篇只有区区几十个人读啊?为什么有些内容简单到只有一行注册码的文章浏览量反而轻松破万?”这样的疑惑如鲠在喉啊!写技术博 ...

  8. 《剑指offer》第十题(斐波那契数列)

    // 面试题:斐波那契数列 // 题目:写一个函数,输入n,求斐波那契(Fibonacci)数列的第n项. #include <iostream> using namespace std; ...

  9. C#版 - 剑指offer 面试题9:斐波那契数列及其变形(跳台阶、矩形覆盖) 题解

    面试题9:斐波那契数列及其变形(跳台阶.矩形覆盖) 提交网址: http://www.nowcoder.com/practice/c6c7742f5ba7442aada113136ddea0c3?tp ...

随机推荐

  1. 《java编程思想》--多线程基础--Runnable

    一.简单说下Runnable是什么 1.它是一个接口 2.只提供了run方法 3.这个接口提供了一个协议:实现这个接口的类是active的(不必成为Thread的子类) 4.run方法没有返回值 /* ...

  2. lex&yacc6 ---error

    类的检测 http://blog.csdn.net/pandaxcl/article/details/1536784

  3. java学习笔记_MIDI_GUI

    import javax.sound.midi.*; import javax.swing.*; import java.awt.event.*; import java.awt.*; class M ...

  4. linux命令之vim使用-(转)vim的保存文件和退出命令

    博客地址: http://blog.sina.com.cn/s/blog_5e357d2d0100zmth.html

  5. MAC机中安装RUBY环境

    在安装CocoaPods之前要先配置好RUBY环境,本文就怎么安装RUBY的环境进行一总结.安装Ruby环境首先需要安装Xcode然后需要安装Homebrew,接下来需要安装RVM最后安装Ruby环境 ...

  6. leetcode学习笔记--开篇

    1 LeetCode是什么? LeetCode是一个在线的编程测试平台,国内也有类似的Online Judge平台.程序开发人员可以通过在线刷题,提高对于算法和数据结构的理解能力,夯实自己的编程基础. ...

  7. epoll_create, epoll_ctl和epoll_wait

    参考代码 #include <iostream> #include <sys/socket.h> #include <sys/epoll.h> #include & ...

  8. MFC VC6++学习笔记

    一.mfc中基于对话框程序添加菜单栏 1打开对话框资源,然后右键->属性->常规 里面有个"菜单" 下拉框,然后选择IDM_USER! 2打开对话框,右键属性,选择刚才 ...

  9. 1065. A+B and C (64bit)

    #include<stdio.h> #include <math.h> int main() { long long a,b,c,sum; int n,i; while(sca ...

  10. oracle行转列、列转行

    一.行转列 需要将如下格式 转换为: 这就是最常见的行转列,主要原理是利用decode函数.聚集函数(sum),结合group by分组实现的 create table test( id varcha ...