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,递归与迭代的区别
两者的区别:
两者的关系:
- 递归中有迭代,但迭代中不一定有递归,大部分可以相互转换;
- 相比较而言,能用迭代就不要用递归,递归不断调用函数,浪费空间,也容易引起堆栈溢出;
4,小结
结合自己的理解重新定义并补充循环与遍历的概念。
递归:也就是函数重复调用自身,并明确有递归结束条件的编程。
迭代:也就是按找某种规则执行重复的活动,每一次执行的结果会作为下一次执行的初始值。
循环:满足条件的情况下,重复执行同一段代码。
遍历:按照一定的规则访问树形结构中的每一个节点,且每个节点仅访问一次。
实际开发中,经常会用到这些方法,我们清楚的理解这些概念并熟悉应用,就会在编写代码时,规避掉一些常识性的bug。