这是通往幼儿园的车,佬请主动下车右转!


目录

引子

深度优先搜索

从记忆化搜索到动态规划

滚动数组优化

尾声


引子

很久很久以前,我们的小斐波那契养了一对小兔子,哦,这两只贪吃的小兔子在某个阳光明媚的早晨,不小心吃了一株基因突变的大白菜而发生了基因突变,于是乎这两只小兔子及其后代获得了以下能力:
        1、永生
        2、繁殖周期固定,且一次繁殖只能生出一对小兔子,与此同时小兔子出生后的第一周期不具备繁殖能力

        也就是说第一周期小兔子没有繁殖能力,所以还是一对;第二周期生下一对小兔于是共有两对小兔;第三周期老兔子又生下一对,因为小兔子还没有繁殖能力,所以一共是三对……
        小斐波那契因为没有作业,闲的没事干,于是开始无聊地数兔子,他发现,兔子对数按周期数呈这样一个数列:1、1、2、3、5……聪明的小斐波那契自然也发现了数列的规律:前面相邻两项之和,构成了后一项。小斐波那契十分高兴,他决定将数列用自己的名字命名,于是乎著名的“斐波那契数列”诞生了,它具有以下美妙而简单的性质:
1、
2、


深度优先搜索

一不小心小斐波那契到了上高中的年纪,他的小兔子在家里生了一窝又一窝,每次回到家小斐波那契都很苦恼:因为兔子繁殖的速度超过了他学算数的速度,他已经数不清自己家里有多少对兔子了,但是他还记得小兔子已经繁殖了多少周期,他想请你教教他,算算自己家里究竟有了多少对兔子,这决定着小兔子们的死活——究竟是被吃掉,还是被吃掉。

#include<bits/stdc++.h>
using namespace std;
int dfs(int x){if(x==1) return 1;else if(x==2) return 1;return dfs(x-1)+dfs(x-2);
}
int main(){int n;scanf("%d",&n);printf("%d",dfs(n));return 0;
} 

小斐波那契十分高兴,因为算出来的结果显示小斐波那契的家足够容纳更多的小兔子,所以他决定暂时不吃掉这些小兔子,直到有一天——


从记忆化搜索到动态规划

小斐波那契发现输入繁殖周期后,自己的电脑计算小兔子的数量需要很久,经过细细推敲,小斐波那契发现重复的、多余的搜索占用了大量的时间,比如:

小斐波那契不想让这些重复的搜索占用自己和兔兔玩耍的时间,他决定更新你的代码:

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
int a[N];
int dfs(int x){if(x==1) return 1;else if(x==2) return 1;if(!a[x]) a[x]=dfs(x-1)+dfs(x-2);return a[x];
}
int main(){memset(a,0,sizeof(a));int n;scanf("%d",&n);printf("%d",dfs(n));return 0;
} 

这样子小斐波那契就不用花很多时间在电脑前等结果,而是有很多多余的时间和小兔子玩耍了,不过小斐波那契依然觉得自己的代码不够精简,于是又思考了两天,代码3.0出炉了:

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
int n,a[N];
int main(){memset(a,0,sizeof(a));a[1]=1;a[2]=1;scanf("%d",&n);for(int i=3;i<=n;i++) a[i]=a[i-1]+a[i-2];printf("%d",a[n]);return 0;
} 

滚动数组优化

经过两次优化,小斐波那契对3.0代码十分满意,不过,追求十全十美的小斐波那契仍然觉得代码有一定的优化空间,譬如……空间复杂度?

#include<bits/stdc++.h>
using namespace std;
int n,a[5];
int main(){memset(a,0,sizeof(a));a[1]=1;a[2]=1;scanf("%d",&n);for(int i=3;i<=n;i++){a[3]=a[1]+a[2];a[1]=a[2];a[2]=a[3];}printf("%d",a[3]);return 0;
} 

尾声

萧炎和纳兰家的三年之约如期而至又过了三年,小斐波那契从高中毕业啦,小兔子也繁殖了六十个周期,毕竟人到了18岁,就不能过得像个小孩子,小斐波那契决定忍痛杀死自己那养了三年的1548008755920只小兔子,请全世界人民吃烤全兔,那么你觉得平均每个人能分到多少多少只兔子呢?

幼儿园:从斐波那契数列开始相关推荐

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  9. 面试官问你斐波那契数列的时候不要高兴得太早

    增加内容 递归改进版 矩阵快速幂解法 通项表达式解法 列表法 斐波那契数列应用 前言 假如面试官让你编写求斐波那契数列的代码时,是不是心中暗喜?不就是递归么,早就会了.如果真这么想,那就危险了. 递归 ...

最新文章

  1. dp,sp,px相互转化
  2. java 同步转并行_Java线程与并行编程(二)
  3. Mongodb python驱动教程
  4. 爬取广州所有停车场数据(Python)
  5. 【STM32】定时器中断实验代码详解
  6. ERROR 1366 (HY000): Incorrect string value......(Mysql报错解决)
  7. 基于Linux命令行终端的ftp客户端程序
  8. python自动化办公excel-自动化办公:python操作Excel
  9. Chrome上网问题解决记录
  10. 2013年全国各大著名的IT公司薪资待遇大揭密 给出入职场的民工一点建议
  11. 3d胆码计算机方法,3D百十个位定胆技巧准确率95
  12. 别再用QQ的破数字邮箱了,你其实还有注册姓名全拼微软邮箱的机会
  13. AppCan学习笔记(2)-UI控件
  14. 新浪企业邮箱服务器怎么设置,新浪企业邮箱如何在Iphone设置邮箱账号
  15. 基于stm32的四轴无人机和智能车编程实践目录
  16. GitChat · 安全 | 基于机器学习的 Webshell 发现技术探索
  17. mysql索引linke和等于_10分钟让你明白MySQL是如何利用索引的
  18. php判断手机还是电脑
  19. 3.4 数值分析: 迭代法的收敛性
  20. 设计模式基础篇-04-建造者模式

热门文章

  1. Java Apache中的高危漏洞复现
  2. 腕能助手android9,腕间应用助手
  3. 【华为OD机试真题 JAVA】字符串分割(二)
  4. 三菱m64计算机连接参数,三菱M64OPTION参数讲义资料.docx
  5. S3C2440移植Linux4.19.275内核以及过程中遇到的问题
  6. html table 标签 边框 边距问题
  7. 项目文档编写规范与代码规范
  8. 【Qt Quick】UDP中的端口号随机设置
  9. DeFi 生态大溃败:“寿司”,糊了;“三文鱼”,焦了
  10. 数字图像处理知识(2)