作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我阅读了关于递归斐波那契数列的大 O 的两篇文章,但仍然没有概念性地理解它为什么是 O(2^n) .
这不是此 link 的副本.请不要标记为重复。我正在寻找 概念答案 .
这是最简单的递归函数之一,我想了解如何在没有复杂数学和证明的情况下查看它并确定大 O。
// O(2^n)
function fiboR(n){
if( n === 0 || n === 1 ){
return n;
} else if ( n >=2 ){
return fiboR(n-1) + fiboR(n-2);
}
}
// O(n)
function fibo(n){
let prev0 = 0;
let prev1 = 1;
if( n === 0 || n === 1 ){
return n;
}
while( n-- >= 2){
sum = prev0 + prev1;
prev0 = prev1;
prev1 = sum;
}
return sum;
}
最佳答案
通过绘制函数调用图很容易计算。只需为每个 n 值添加函数调用,然后查看数字如何增长。
大 O 是 O(Z^n),其中 Z 是黄金比例或大约 1.62。
当我们增加 n 时,lenoardo 数和斐波那契数都接近这个比率。
2 (2 -> 1, 0)
4 (3 -> 2, 1) (2 -> 1, 0)
8 (4 -> 3, 2) (3 -> 2, 1) (2 -> 1, 0)
(2 -> 1, 0)
14 (5 -> 4, 3) (4 -> 3, 2) (3 -> 2, 1) (2 -> 1, 0)
(2 -> 1, 0)
(3 -> 2, 1) (2 -> 1, 0)
22 (6 -> 5, 4)
(5 -> 4, 3) (4 -> 3, 2) (3 -> 2, 1) (2 -> 1, 0)
(2 -> 1, 0)
(3 -> 2, 1) (2 -> 1, 0)
(4 -> 3, 2) (3 -> 2, 1) (2 -> 1, 0)
(2 -> 1, 0)
关于javascript - 递归斐波那契大 O 的非数学解释是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59428251/
我是一名优秀的程序员,十分优秀!