// 递归斐波那契数列
let count = 0; // 执行的次数
function fib(n) {
count++;
if (n === 0 || n === 1) {
return 1;
}
return fib(n - 1) + fib(n - 2);
}
// console.log('fib(3)', fib(3)); // 执行5次
// console.log('fib(4)', fib(4)); // 执行9次
// console.log('fib(5)', fib(5)); // 执行15次
// console.log('fib(6)', fib(6)); // 执行25次
console.log('fib(30)', fib(30)); // 执行2692537次
// console.log('fib(35)', fib(35)); // 执行29860703次
console.log('count', count); // 29860703
// fib(3) 3
// fib(4) 5
// fib(5) 8
// fib(6) 13
// 指数时间复杂度: O(2^n)
// 为什么不是“平方时间复杂度”
// 如果是平方时间复杂度,那么,传入3应该执行 3*3 === 9
// 如果是平方时间复杂度,那么,传入4应该执行 4*4 === 16
// 如果是平方时间复杂度,那么,传入5应该执行 5*5 === 25
// 如果是平方时间复杂度,那么,传入6应该执行 6*6 === 36
// 如果是平方时间复杂度,那么,传入20应该执行 20*20 === 400
// 如果是平方时间复杂度,那么,传入30应该执行 30*30 === 900
// 如果是平方时间复杂度,那么,传入35应该执行 35*35 === 1225
// 现在的实际执行次数是,传入3,执行5次
// 现在的实际执行次数是,传入4,执行9次
// 现在的实际执行次数是,传入5,执行15次
// 现在的实际执行次数是,传入6,执行25次
// 现在的实际执行次数是,传入20,执行10946次
// 现在的实际执行次数是,传入30,执行2692537次
// 现在的实际执行次数是,传入35,执行29860703次
// 故:推断出时间复杂度是指数而非平方