递归和迭代
递归和迭代在计算机编程中是很常用的思想。
递归简单来说就是将问题拆解为一个个子问题。而迭代则是在先前问题的基础上再重复一遍。
以走路从 A 点到 B 点为例。
递归的做法是将走路这个问题拆解为迈步这一子问题,接着不断的从当前位置迈步,直到到达 B 点。
迭代则是先走了一步,没到,那么就在走了一步的基础上接着走,走了两步还没到,就在走了两步的基础上接着走,以此类推,直到达到 B 点。
两者的差异在于对于基准的不同。
递归以当前点为基准,每次迈步都是以当前所在点开始判断。
迭代则是以出发点 A 点为基准,每次迈步都是以出发点为基准。
以下是使用 JS 编写的递归和迭代的示例:
// 迭代
function gotoPoint1(start = 1, goal = 10) {
let count = 0;
for (let i = start; i <= goal; i++) {
console.log(`当前走了 ${count} 步, 还没到达终点`)
count++;
}
console.log(`当前走了 ${count} 步, 到达终点`)
return count;
}
// 递归
function gotoPoint2(start = 1, goal = 10) {
if (start < goal) {
console.log(`当前走到 ${start}, 还没到达终点`)
return gotoPoint2(start + 1, goal)
}
console.log(`当前走到 ${start}, 到达终点`)
return start
}
gotoPoint1()
console.log('-'.padEnd(100, '-'))
gotoPoint2()
运行可以得到以下结果:
当前走了 0 步, 还没到达终点
当前走了 1 步, 还没到达终点
当前走了 2 步, 还没到达终点
当前走了 3 步, 还没到达终点
当前走了 4 步, 还没到达终点
当前走了 5 步, 还没到达终点
当前走了 6 步, 还没到达终点
当前走了 7 步, 还没到达终点
当前走了 8 步, 还没到达终点
当前走了 9 步, 还没到达终点
当前走了 10 步, 到达终点
----------------------------------------------------------------------------------------------------
当前走到 1, 还没到达终点
当前走到 2, 还没到达终点
当前走到 3, 还没到达终点
当前走到 4, 还没到达终点
当前走到 5, 还没到达终点
当前走到 6, 还没到达终点
当前走到 7, 还没到达终点
当前走到 8, 还没到达终点
当前走到 9, 还没到达终点
当前走到 10, 到达终点
递归和迭代
http://localhost:8080/archives/di-gui-he-die-dai