首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >斐波那契序列JavaScript的第n个值(超时错误)

斐波那契序列JavaScript的第n个值(超时错误)
EN

Stack Overflow用户
提问于 2018-10-18 07:29:43
回答 1查看 447关注 0票数 0

对于这个Kata (查找斐波那契数列的第n个值),我有一个有效的解决方案,但是我总是得到一个超时错误。有没有人能提供关于如何重构它以更有效地运行的建议?提前感谢!

下面是description - https://www.codewars.com/kata/simple-fun-number-395-fibonacci-digit-sequence/train/javascript链接

对于给定的三个非负整数a,b和n,就像斐波那契数列一样,生成一个无穷大的序列,使用下面的规则:

a,b,n,生成一个无限的序列,就像斐波那契数列一样,使用以下规则:

step1:使用ab作为初始序列。step2:计算序列的最后两位数之和,并将其附加到序列的末尾。重复查找你的任务就是完成函数step2。返回序列的第n位(从0开始)。

代码语言:javascript
运行
复制
function find(a,b,n){
  let start = ("" + a + b);
  let next = a + b;
  let seq = start + next;
  
  while (seq.length <= n) {
    seq += (parseInt(seq[seq.length-2]) + parseInt(seq[seq.length-1]));
  }
  return parseInt(seq[n]);
}

console.log(find(7,8,9))

// should return 5

EN

回答 1

Stack Overflow用户

发布于 2018-10-18 11:34:22

当你转换并进行字符串操作时,它通常会更慢。

代码语言:javascript
运行
复制
function nextVal(num){
    const last = (num%10);
    const lastButOne = (num - last)/10 % 10;
    const sum = last + lastButOne;
    return sum < 10 ? num * 10 + sum : num *100 + sum;
}
function find(a,b,n){
  let num = a * 10 + b;
  const above = Math.pow(10, n);// anything less than we don't have enough digits


  while (num < above) {
    num = nextVal(num);
  }
  return Number(`${num}`.charAt(n));
}

上面的代码依赖于数字检查,只将其转换为字符串(这也可以避免)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52864946

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档