偶数斐波那契数代码问题求助:实现结果与教程不符
你的代码存在的问题及修正方案
1. 未声明变量引发全局污染
代码中num = array[i - 2] + array[i - 1];里的num没有用let/const声明,会自动成为全局变量,不符合JS变量声明规范,容易引发意外的全局变量冲突。
2. 循环逻辑与常见教程需求不符(核心问题)
你的函数是生成前n项斐波那契数列后,求和其中的偶数项。但多数教程中,fiboEvenSum(n)的需求是求所有不超过n的偶数斐波那契数之和:
- 调用
fiboEvenSum(8)时,你的代码生成前8项斐波那契数[1,2,3,5,8,13,21,34],偶数项和为2+8+34=44 - 如果教程需求是不超过8的偶数斐波那契数之和,正确结果应为
2+8=10,这就导致结果不符。
修正后的代码
针对“前n项偶数和”的修正(解决变量声明问题)
function fiboEvenSum(n) { const array = [1, 2]; let sum = 0; for (let i = 2; i < n; i++) { // 声明num变量 const num = array[i - 2] + array[i - 1]; array.push(num); } // 合并后两个循环,减少不必要的数组 for (const num of array) { if (num % 2 === 0) { sum += num; } } return sum; } const al = fiboEvenSum(8) console.log(al) // 输出44
针对“不超过n的偶数和”的修正(符合多数教程需求)
function fiboEvenSum(limit) { let sum = 0; let prev = 1; let curr = 2; // 循环条件改为当前斐波那契数不超过limit while (curr <= limit) { if (curr % 2 === 0) { sum += curr; } // 生成下一个斐波那契数 const next = prev + curr; prev = curr; curr = next; } return sum; } const al = fiboEvenSum(8) console.log(al) // 输出10
内容的提问来源于stack exchange,提问作者nikos mitsopoulos
相关产品推荐
相关产品推荐

