认识javascript递归

未结 0 3021
VIP1 2019年09月20日
悬赏:20积分

1.什么是递归?

  所谓的递归就是自己调用自己,采取函数调用函数自身的方式工作。

  javascript中递归最典型的应用是求阶乘和波菲那契数列。

2.举个栗子:求1+2+3...+n的和?

利用for循环的方法计算出来:


function sum(n) {
var total = 0
for (var i = 1; i <= n; i++) {
total = total + i
}
return total
}
console.log(sum(3)); //得出6


利用递归方法求:

function sum1(n) {
if (n === 1) { // 当n=1时,要给出终止条件
return 1;
}
return sum1(n - 1) + n;
}
console.log(sum1(3)); // 6


 利用递归时,处理不当就会陷入死循环中。

3.利用递归求波菲那契数列的结果。

 什么是波菲那契数列,菲波那切数列又称黄金分割数列,指斐波那契数列数列从第3项开始,每一项都等于前两项之和。,如:(1、1、2、3、5、8、13、21)。 

function fb(n){
if (n == 1 || n==2) { // 从第三项开始
return 1
}
return fb(n-1)+fb(n-2)
}
console.log(fb(4)) //3


4.利用递归实现深拷贝。

var objCopy = function (obj) {
if (typeof obj !== 'object') return;
// // 根据obj的类型判断是新建一个数组还是对象
var newObj = obj instanceof Array ? [] : {};
for (var key in obj) {
if (obj.hasOwnProperty(key)) {
newObj[key] = typeof obj[key] === 'object' ? objCopy(obj[key]) : obj[key];
}
}
return newObj;
}
var sourObj = {
a: 1,
name: 'hello',
b: 23
}
let targeObj = objCopy(sourObj, {});
targeObj.a = 10;
console.log(sourObj); // {a: 1, name: "hello", b: 23}
console.log(targeObj); // {a: 10, name: "hello", b: 23}


结:编写递归最主要的就是找出递归的公司和终止条件,不然很容易陷入死循环中,看似简单,但递归也有很多的弊端,谨慎使用。

回帖
  • 还没有人回复
本周热议
没有相关数据
layui

微信扫码关注 网盟开源 公众号