Bootstrap

聊一聊前端算法面试——递归

写在前面

今天来聊一聊前端面试中出现频率非常高的一种算法思想——「递归」。

先看下几个常见的面试题:

假如楼梯有n个台阶,每次可以走1个或2个台阶,请问走完这n个台阶有几种走法❓
如何用递归思想实现深拷贝❓
如何用递归思想实现数组的扁平化❓
你可以先思考一下如何回答上边的问题,然后带着答案来阅览接下来的内容。

如何编写递归代码❓

递归思想在前端面试中非常常见,除了上面的一些题目之外,二叉树的前中后序遍历,斐波那契数列等都用到了递归的思想。简单地理解递归就是:自己调用自己。那如何编写递归的代码呢❓ 在笔者看来:

主要有两个关键步骤:

写出递归公式
找到终止条件
先来看个简单的例子:如何求1+2+3+4+…+n的和?相信用for循环的方法大家都知道如何编写:

function sum(n) {
 var total = 0
 for (int i = 1; i <= n; i++) {
 	total = total + i
 }
 return total
}
复制代码

那如何改为递归的写法呢?

第一步: 写出递归公式

细心观察就会发现,其实就是n与n-1和n-2的关系

sum(n) = sum(n-1) + n
···
···
···
sum(100) = sum(99) + 100
sum(99) = sum(98) + 99
···
···
···
sum(5) = sum(4) + 5
sum(4) = sum(3) +
;