如何将斐波那契函数结果存入数组?递归代码报错求解
问题解决:递归斐波那契函数生成数组及报错修复
报错原因
你写的recurseFivonaci(n)函数返回的是单个斐波那契数值(比如调用recurseFivonaci(10)会返回55),而map是数组专属方法,数字类型调用该方法自然会抛出TypeError。
解决方案
要生成包含从第0项到第n项的斐波那契数组,有两种可行方案:
方案1:修改递归函数直接返回数组
这种方式避免了原递归函数的重复计算问题,效率更高:
function fibonacciArray(n) { // 基础情况:n=0返回[0],n=1返回[0,1] if (n === 0) return [0]; if (n === 1) return [0, 1]; // 递归获取前n-1项的数组,再计算新项添加进去 const prevArray = fibonacciArray(n - 1); prevArray.push(prevArray[prevArray.length - 1] + prevArray[prevArray.length - 2]); return prevArray; } // 生成0到10项的斐波那契数组 const result = fibonacciArray(10); console.log(result); // 输出:[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
方案2:保留原递归函数,循环生成数组
如果不想修改原递归函数,可以通过循环调用它来填充数组:
let result = []; function recurseFivonaci(n){ if(n < 2){ return n; } return recurseFivonaci(n - 2) + recurseFivonaci(n - 1); } // 循环调用函数,把0到10的斐波那契数依次推入数组 for(let i = 0; i <= 10; i++){ result.push(recurseFivonaci(i)); } console.log(result); // 输出:[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
注意:方案2的原递归函数存在大量重复计算(比如计算第10项时会重复计算第9、8、...项多次),当n较大时性能会很差,推荐优先使用方案1。
内容的提问来源于stack exchange,提问作者lsm
相关产品推荐
相关产品推荐

