首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用循环和递归的斐波那契级数

使用循环和递归的斐波那契级数
EN

Stack Overflow用户
提问于 2019-01-23 12:27:53
回答 3查看 117关注 0票数 1

因此,我使用循环和递归技术导出了斐波那契级数的代码。但是,我如何才能在不使用循环和递归技术的情况下编写相同的代码呢?

这是使用循环:

代码语言:javascript
运行
复制
function fibouter()
 {
    let n=1;
     function fib()
    {
      let t1=0,t2=1,next,i;
       for(i=1;i<=n;++i)
       {
            next=t1+t2;
             t1=t2;
             t2=next;
        }
        n++;
       return t2;

     }
     return fib;
 }
   const run=fibouter();

这是使用递归:

代码语言:javascript
运行
复制
function fib(n) 
{
   return n < 2 ? n : fib(n - 1) + fib(n - 2);
}

如何在不使用循环和递归的情况下获得相同的输出?我想尝试一下,因为它减少了迭代次数。

提前谢谢。

EN

回答 3

Stack Overflow用户

发布于 2019-01-23 12:38:51

您可以直接使用Binet的Fibonacci数公式。

代码语言:javascript
运行
复制
function fib(n){return Math.round((Math.pow((1+Math.sqrt(5))/2,n)-Math.pow((1-Math.sqrt(5))/2,n))/Math.sqrt(5))}

for(let i = 0 ; i < 15; i++)
{
    console.log(fib(i));
}

票数 2
EN

Stack Overflow用户

发布于 2019-01-23 13:16:43

虽然记忆法是斐波那契(参考文献:Fibonacci memoization algorithm in C++)的最好方法,但当你在寻找一种不需要递归和循环的计算方法时,这里是最基本的方法。尽管你仍然需要一个循环,你能做的就是将预先计算好的斐波那契数列存储在一个数组中,并根据需要打印出来。示例:

代码语言:javascript
运行
复制
int fib[100000];
fib[0] = 1;
fib[1] = 2;
for (int i=3; i<100000; ++i) {
    fib[i]=fib[i-1]+fib[i-2];
}

然后,您可以询问打印斐波纳契数组的哪个位置,并简单地打印数组fib[]的索引。

票数 0
EN

Stack Overflow用户

发布于 2019-01-23 15:02:44

实际上,我只是想出了一个没有循环和递归的解决方案。

代码语言:javascript
运行
复制
function fib() {
    let t1=0,t2=1;
    return () =>  {
        const next=t1+t2;
        t1=t2;
        t2=next;

        return t1;
     }

    }
   let run=fib();

我认为这个解决方案更好,并且减少了递归。

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

https://stackoverflow.com/questions/54320031

复制
相关文章

相似问题

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