因此,我使用循环和递归技术派生了斐波那契数列的代码。但是,如何在不使用循环和递归技术的情况下为同一代码编写代码?
这是使用循环:
fftw
这是使用递归:
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();
如何在不使用循环和递归的情况下获得相同的输出? 我想尝试一下,因为它减少了迭代次数。
谢谢。
答案 0 :(得分:2)
您可以直接使用Binet的斐波那契数公式。
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));
}
答案 1 :(得分:0)
尽管记忆是斐波那契的最佳方法(Ref:Fibonacci memoization algorithm in C++),但是当您要求一种无需递归和循环的计算方法时,这是最基本的方法。尽管您仍然需要一个循环,但是您可以做的是将预先计算的斐波那契数列存储在数组中,并根据需要进行打印。示例:
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 []的索引即可。
答案 2 :(得分:0)
实际上,我只是想出了一种无需使用循环和递归的解决方案。
/bin/sh
我认为这种解决方案更好,可以减少递归。