Fibonacci算法
来源:互联网 发布:手机淘宝怎样代理商品 编辑:程序博客网 时间:2024/06/06 16:59
看到了一个优雅的迭代算法。
本质思想都很简单,迭代的话,每个数只与前面两个数有关。
最容易想到的递归,毙了;
然后是数组,每一个都等于前两个之和,for循环一遍,空间占用,毙了;
再然后我的算法:
public int Fibonacci(int n) { if(n==0) return 0; if(n==1)return 1; int f1=1;int f2=1; for(int i=2;i<n;i++){ if(i%2==0)f1=f1+f2; else f2=f1+f2; } return n%2==0?f2:f1; }
可以解决但是不够优雅,为了一个这个分奇偶。主要问题是想不出更好的办法来模拟两个数相加然后再这样一直迭代下去。
优雅的算法:
链接:https://www.nowcoder.com/questionTerminal/c6c7742f5ba7442aada113136ddea0c3来源:牛客网听说:谭浩强版有 int Fibonacci(int n) { int f = 0, g = 1; while(n--) { g += f; f = g - f; } return f; }
g += f; //求和这个很容易想到
f = g - f; //这个就比较有趣了,通过再减一下把被覆盖的g还原处来。
这么看:
f=0 g=1 \ | \g前面的和 f=原来的g \| | g前面的和 f=原来的g ..............
最后return的是f,这就是n的问题了。
然后是这题的变形跳台阶。每次最多一跳或两跳。
再然后是每次<=N跳的。
比较直观的想法:N个台阶跳法可以分为:1.先上一节,再直接到终点,这里跳法有1种(f(1));2.先上两节,再直接到终点,这里跳法有2种(f(2));3.先上3节,再直接到终点,有f(3)种;....N.直接N节,有1种。所以总的f(N)=f(1)+f(2)+f(3)+.......+f(N-1)+1种。f(1)和f(2)已知化简一下,f(N)=2^(N-1).
0 0
- fibonacci 算法
- Fibonacci算法
- Fibonacci算法
- Fibonacci数列问题算法
- Fibonacci递归算法
- Fibonacci数列 算法
- Fibonacci的算法
- Fibonacci 数列算法
- 算法之数列 Fibonacci
- Fibonacci查找算法
- java Fibonacci算法
- Fibonacci数列-递归算法
- 【算法】Fibonacci解法总结
- Fibonacci数列算法分析
- java-算法Fibonacci序列
- 欧几里德算法中的Fibonacci序列
- fibonacci数列的矩阵算法
- 每日一算法:Fibonacci数列
- ADO.NET 基于OOP原则优化数据访问
- 砝码称重
- CentOS7yum使用阿里源
- Apache James SMTP身份认证
- 《谷歌和亚马逊如何做产品》读书笔记之十一:胜在决策
- Fibonacci算法
- KMP 算法 —— 字符串匹配算法
- 单点登录SSO:概述与示例
- Android基于源码的单例模式
- 一株植根于小内存、低速度微型计算机上的艳丽奇葩
- unity 最新场景加载SceneManager.LoadScene的用法
- Python中函数库的引用--Python(9)
- MySQL数据库加强
- 第226讲:Spark Shuffle Pluggable框架SortShuffle具体实现解析