数据结构之斐波那切数列
英文: Fibonacci Number
数列规则: 0 1 1 2 3 5 8 13 21 …
f(n)=f(n-1)+f(n+1)
f(1)=1
f(0)=0
1 | private int f(int n) { |
由上述公式可得:
该图中可以看出, f(4)会计算1次, f(3)会计算2次, f(2)会计算3次, f(1)会计算2次;
实际上, 一个值已经计算过了, 我们就可以不需要重复计算多次了, 因此优化之后的结果如下:(以空间换时间)
1 | private Integer f(Integer n, Map<Integer, Integer> maps) { |
最终方法: 迭代(for/while), 有点耗时短, 效率高;可以避免递归方法计算的数字过大, f()嵌套过度导致爆栈的问题
1 | private int f(int n) { |
公式图解(红色:移动, 绿色:相加)