我对”递归和迭代“的总结

4,113 阅读2分钟


1,递归

递归:程序重复调用自身,并明确有递归结束条件的编程称为递归。

使用要满足以下两个条件:

  • 在过程或函数内调用自身;
  • 必须有一个明确的递归结束条件;

实例

// 累计求积
const sum = (n) => {
    if (n <= 1) {
        return 1;
    } else {
        return n * sum(n-1);
    }
};

sum(5); // 120

2,迭代

迭代:迭代是重复反馈过程的活动。每一次对过程的重复称为一次“迭代”,每一次迭代得到的结果会作为下一次迭代的初始值。如下简单例子

for循环

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

for/in

// for/in可以循环数组和对象
const arr = {a:1,b:2,c:3}
//或者 arr = [1,3,4];
for(let k in arr){
    console.log(k,arr);
}

数组的迭代方法

arr.map((item, index, arr) => {
    // ...
});

arr.forEach((item, index, arr) => {
    // ...
});

arr.some((item, index, arr) => {
    // ...
});

arr.filter((item, index, arr) => {
    // ...
});

arr.every((item, index, arr) => {
    // ...
});

3,递归与迭代的区别

两者的区别:


两者的关系:

  1. 递归中有迭代,但迭代中不一定有递归,大部分可以相互转换;
  2. 相比较而言,能用迭代就不要用递归,递归不断调用函数,浪费空间,也容易引起堆栈溢出;

4,小结

结合自己的理解重新定义并补充循环与遍历的概念。

递归:也就是函数重复调用自身,并明确有递归结束条件的编程。

迭代:也就是按找某种规则执行重复的活动,每一次执行的结果会作为下一次执行的初始值。

循环:满足条件的情况下,重复执行同一段代码。

遍历:按照一定的规则访问树形结构中的每一个节点,且每个节点仅访问一次。

实际开发中,经常会用到这些方法,我们清楚的理解这些概念并熟悉应用,就会在编写代码时,规避掉一些常识性的bug。