斐波那契数列

  1. C语言中:FIB数列
  2. 中文名:斐波那契数列
  3. 别名:黄金分割数列,兔子数列
  4. 该数列:0、1、1、2、3、5、8、13…
  5. 斐波那契数列以如下被以递推的方法定义:
    F (0)=0
    F (1)=1
    F (n)= F (n - 1)+ F (n - 2)(n ≥ 2)

我们最常见的就是直接题目要求求斐波那契数列的第n项,这类是最简单的.
那么下列所求的斐波那契数列要求有所不同.
1.求斐波那契数列的第n项,答案需要取模le9+7(1000000007),如计算初始结果为:1000000008,请返回1.

class Solution {public int fib(int n) {final int MOD = 1000000007;if(n < 2){return n;}int p = 0, q = 0, r = 1;for(int i = 2; i <= n; i++){p = q;q = r;r = (q + p) % MOD;}return r;}
}

由于斐波那契数列存在速推关系,因此使用动态规划求解
时间复杂度:O(n)
空间复杂度:O(1)

2.经典青蛙跳台阶问题
一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶…,求该青蛙跳上一个n级的台阶总共有多少种跳法.

//答案需要取模le9+7(1000000007),如计算初始结果为:1000000008,请返回1
①
class Solution {public int numWays(int n) {if(n == 0 || n == 1){return 1;}int p = 1, q = 1, r = 2;for(int i = 3; i <= n; i++){p = q;q = r;r = (p + q) % 1000000007;}return r;}
}
②
class Solution {public int numWays(int n) {if(n == 0 || n == 1){return 1;}int p = 1, q = 2, r;for(int i = 3; i <= n; i++){r = (p + q) % 1000000007;p = q;q = r;}return q;}
}
③
class Solution {public int numWays(int n) {if(n < 2){return 1;}int[] dp = new int[n + 1];dp[0] = 1;dp[1] = 1;dp[2] = 2;for(int i = 3; i <= n; i++){dp[i] = dp[i - 1] + dp[i -2];dp[i] = dp[i] % 1000000007;}return dp[n];}
}

不难看出,第①种和第②种代码没多大差别
①~③都是使用动态规划
①和②:时间复杂度O(n)/空间复杂度O(1)
③:时间复杂度O(n)/空间复杂度O(n)
注:
1.如果题目没有要求答案需要取模,那么解题一个方法是可以按照上述,另一个就是改成long方法.
2.不难看出此题和斐波那契数列有一点区别,那就是斐波那契数列是从0开始,即(0,1,1,2…),而此题就是从1开始,即(1,1,2…)
多注意以上小细节那么解决此题就不是难事啦~

//不难观察出一个规律:
//F(i)= 2 * F(i - 1)
class Solution {public int numWays(int n) {if(n == 0){return 0;}int ret = 1;for(int i = 2; i <= n; i++){ret *= 2;}return ret;}
}
//既然是这个规律,那我们不妨再简化一下,运用左移运算符
class Solution {public int numWays(int n) {if(n == 0){return 0;}return 1 << (n - 1);}
}

3.养兔子

解题思路:
不难看出这个题目也是关于斐波那契数列
第一个月和第二个月兔子的数量都是1
第三个月兔子数量是2
第四个月兔子数量是3
第五个月兔子数量是5

import java.util.*;
public class Main{public static void main(String[] args){Scanner sc = new Scanner(System.in);while(sc.hasNext()){int n = sc.nextInt();System.out.println(GetNum(n));}}public static Map<Integer, Long> map = new HashMap<>();public static long GetNum(int n){if(n == 1 || n == 2){return 1;}else{if(map.containsKey(n)){return map.get(n);}else{map.put(n, GetNum(n - 1) + GetNum(n - 2));}return map.get(n);}}
}

未完待续~

关于斐波那契数列那些事儿~相关推荐

  1. c语言 兔子数列螺线图,经典算法大全51例——2.斐波那契数列(兔子数列)

    经典算法大全51例--2.斐波那契数列 算法目录合集 地址 说明 题目 原理分析 代码实现--Java 相关题目其他变形: 1.爬楼梯(来源:力扣LeetCode) 2.兔子成熟期拉长 官方题解 分析 ...

  2. java 斐波拉_Java实现斐波那契数列

    斐波纳契数列,又称黄金分割数列,指的是这样一个数列:1.1.2.3.5.8.13.21.--在数学上,斐波纳契数列以如下被以递归的方法定义:F0=0,F1=1,Fn=F(n-1)+F(n-2)(n&g ...

  3. 剑指offer:面试题10- I. 斐波那契数列

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

  4. 用递归法计算斐波那契数列的第n项

     斐波纳契数列(Fibonacci Sequence)又称黄金分割数列,指的是这样一个数列:1.1.2.3.5.8.13.21.--在数学上,斐波纳契数列以如下被以递归的方法定义:F0=0,F1=1, ...

  5. 循环斐波那契数列_剑指offer #10 斐波那契数列

    (递归和循环)#10 斐波那契数列 一.斐波那契数列 定义: n = 0 , f(n) = 0 n = 1 , f(n) = 1 n > 1 , f(n) = f(n-1) + f(n-2) 思 ...

  6. 用C语言编写:判断一个≥2的整型数是否存在于斐波那契数列中?

    自己写的,感觉挺有成就感的,就展示出来吧! 判断一个≥2的整型数是否存在于斐波那契数列中? 若存在,则返回第几项:若不在,则返回-1 #include <stdio.h> long gen ...

  7. 算法(1)斐波那契数列

    1.0 问题描述 实现斐波那契数列,求第N项的值 2.0 问题分析 斐波那契数列最简单的方法是使用递归,递归和查表法同时使用,可以降低复杂度. 根据数列特点,同时进行计算的数值其实只有3个,所以可以使 ...

  8. NOIP模拟题 斐波那契数列

    题目大意 给定长度为$n$序列$A$,将它划分成尽可能少的若干部分,使得任意部分内两两之和均不为斐波那契数列中的某一项. 题解 不难发现$2\times 10^9$之内的斐波那契数不超过$50$个 先 ...

  9. 剑指offer_第7题_斐波那契数列

    题目描述 现在要求输入一个整数n 输出斐波那契数列的第n项(从0开始,第0项为0). n<=39 理解 斐波那契数列 因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子 ...

最新文章

  1. ie8 script445: 对象不支持此操作_经验总结:上海增值税认证勾选安装和操作步骤...
  2. 【转载】“银弹”Hack(IE6、7、8beta1)
  3. 【Docker】Docker Compose 文件和 Docker 兼容性
  4. asp.net mvc webform和razor的page基类区别
  5. AT4 more about the sphere
  6. unity文字特殊效果
  7. 用ajax实现图片上传 帮你简单快速学会使用
  8. 社交APP市场泥沙俱下,怎能脱颖而出
  9. 为知笔记保存为html,为知笔记使用方法
  10. OpenEmbedded 简介
  11. 万顿思电商:拼多多推广是如何收费的?
  12. 【培训实验记录】锐捷SDN交换机和控制器部署
  13. 计算机专业支教,【计算机】梦缘·夏季支教志愿招募
  14. 试发贴:央视《焦点访谈》曝光淘宝网纵容售假
  15. Python爬虫自学笔记(三)动态网页爬取
  16. Java建造者模式(Builder pattern)
  17. Flash Builder 入门
  18. VS2010 与 glut freeglut GLtools glew等 配置教程
  19. Java毕设项目电竞教育公司(java+VUE+Mybatis+Maven+Mysql)
  20. 在浏览器访问不到在阿里云购买服务器的公网ip的解决历程

热门文章

  1. 如何修改数组对象的属性名(把key替换成想要的key,值不变)
  2. 《有效成交量分析法》(威廉•帕斯卡尔)一、有效成交量概念的提出
  3. 通过FinalShell连接AWS的EC2服务器
  4. VC++ RLE压缩算法(附源码)
  5. Word技巧:在表格前添加空行
  6. 移动硬盘故障损坏照片怎么恢复
  7. 马航 失联飞机 猜想
  8. Java轻量级的插件框架PF4J的使用教程
  9. 电路图中的那些类似于箭头的是什么意思?
  10. 二语句法复杂度分析器L2SCA的使用,下载,指标