JS生成斐波那契数列时前两项返回undefined的问题排查
问题分析与修复方案
嘿,这问题其实很常见,就是函数返回语句的位置不对!
你的代码逻辑本身没问题,但仔细看:只有在n>2的else分支里写了return output,而处理n=1和n=2的两个条件分支,仅仅给output赋值了,却没有返回这个数组。函数执行完这两个分支后,没有遇到任何return语句,就会默认返回undefined,这就是你遇到的问题啦。
修复后的代码
我们只需要把return语句移到函数的最后,让所有分支执行完毕后统一返回output就行,这样不管n是1、2还是更大的值,都能得到正确的数组:
function generator(n) { var output = []; var num1 = 0; var num2 = 1; var next; if (n === 1) { output = [0]; } else if (n === 2) { output = [0, 1]; } else { output = [num1, num2]; for (var count = 2; count < n; count++) { next = num1 + num2; num1 = num2; num2 = next; output.push(next); } } // 统一返回,覆盖所有情况 return output; }
测试验证
现在测试几个值:
generator(1)→[0](正确)generator(2)→[0, 1](正确)generator(6)→[0, 1, 1, 2, 3, 5](正确)
当然,你也可以选择在每个条件分支里单独加return output,不过把返回语句统一放在最后会让代码更整洁易读~
内容的提问来源于stack exchange,提问作者mrcrazyog
相关产品推荐
相关产品推荐

