斐波那契数列:1、1、2、3、5、8、13、21、34、55。。。。
文字描述:开头两位为1,从第三位起,每一项都等于前2位相加求和
方法一:递归
function fibo(n){
if( n < 2 ) return 1;
return fibo(n-1) + fibo(n-2);
}
思路:
- 从0开始,前两项,都 return 出数字1
- 从第三项,即数字2开始,调用自身,传入前两项的内容,使其相加求和,return 出内容
- 但递归比较耗性能
调用方法一看结果
var f1 = document.getElementById('f1');
for( let i=0; i<10; i++){
f1.innerHTML == "" ? f1.innerHTML = fibo(i)
: f1.innerHTML = f1.innerHTML + "、" + fibo(i)
}
// 1、1、2、3、5、8、13、21、34、55
方法二:循环 + es6默认参数 + es6解构赋值
function fibo2(n,fio1=1,fio2=1){
if( n < 2 ) return 1;
for( let i=1; i<n; i++){
[fio1,fio2] = [fio2,fio1+fio2];
}
return fio2;
}
思路:
- 定义方法时,设置默认参数都为1,
- 同上,从0开始,前两项,都 return 出数字1
- 从第三项开始,即数字2开始,进行循环,通过解构赋值写法,先fio1=fio2,方便进行下次计算,fio2=fio1+fio2进行前两项相加求和,return 出 fio2
调用方法一看结果
var f2 = document.getElementById('f2');
for( let a=0; a<10; a++){
f2.innerHTML == "" ? f2.innerHTML = fibo2(a)
: f2.innerHTML = f2.innerHTML + "、" + fibo2(a)
}
// 1、1、2、3、5、8、13、21、34、55
如有错误,望提出。有更好的写法的朋友,可以交流一下哦