首页 > 编程知识 正文

斐波那契数列求解(递归函数实现斐波那契数列)

时间:2023-05-03 23:04:25 阅读:88369 作者:3055

zdhf数是指1、1、2、3、5、8、13、21、……这几列。 在数学上,fzdhf数列递归定义如下: F0=0、F1=1、fn=fn-1fn-2(n=2,

常用的fzdhf数列计算方法分为递归和循环两种。

递归

方法一:普通递归

代码美丽而逻辑清晰。 但是,有重复计算的问题。 例如,如果在n为5时计算Fibonacci(4) Fibonacci )3),在n为4时计算Fibonacci )3) Fibonacci )2),则Fibonacci )3)将是重复的计算运行Fibonacci(50 )时,会发生浏览器的假死现象。 毕竟需要递归堆栈,数字太大内存不够。

功能光纤网络(n ) {

if(n==1||n==2) {

返回1

(;

返回光纤通道(n-2 )光纤通道(n-1 );

}

Fibonacci(30 )

方法二:改进递归-把前两位数字做成参数避免重复计算

功能光纤连接(n ) n ) )。

功能光纤(n,v1,v2 ) {

if(n==1) )。

返回v1;

if(n==2) )。

返回v2;

else

返回光纤(n-1、v2、v1 v2 ) ) ) ) ) ) )。

}

返回光纤(n,1,1 ) ) ) )。

}

我是Fibonacci(30岁)

方法三:改进递归-利用闭包特性把运算结果存储在数组里,避免重复计算

虚拟光纤=函数(

letmemo=[ 0,1 ];

let光纤=功能(n ) {

if (memo==未定义)

memo [ n ]=光纤(n-2光纤) n-1 ) )

}

返回记忆

}

返回光纤;

() ) ) )

Fibonacci(30 )

方法三1:改进递归-摘出存储计算结果的功能函数

变量器=函数(func ) {

let memo=[];

返回函数(n ) {

if (memo==未定义)

memo=func (n

}

返回记忆

}

(;

var Fibonacci=memoizer (函数(n ) {

if(n==1||n==2) {

返回1

(;

返回光纤通道(n-2 )光纤通道(n-1 );

() )

Fibonacci(30 )

循环

方法一:普通for循环

功能光纤(n ) {

var n1=1,n2=1,和;

for(letI=2; i n; I ) {2}

sum=n1 n2

n1=n2

n2=和

}

返回和

}

Fibonacci(30 )

方法二:for循环+解构赋值

虚拟光纤通道=功能(n ) )

let n1=1; n2=1;

for(letI=2; i n; I ) {2}

n 1,n2]=[n2,n1 n2]

}

返回n 2

}

Fibonacci(30 )的各种方法的执行需要时间如下图所示。 常规递归改进递归for循环

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。