JavaScript的递归遍历会经常遇到,适当的运用递归遍历,可以提高代码性质量。
1.某些时候递归能替换for循环
我们先看一下下面2个例子。
var arrList = [1,2,3,5,100,500,10000,10000,1000,10000002] //for循环测试 function forTest(){ console.time("for循环") for(let i in arrList){ console.log(((arrList[i] + arrList[i]) * 5 - arrList[i])/arrList[i]) } console.timeEnd("for循环") } //递归遍历测试 function recursive() { console.time("递归遍历") const testFun = function (i) { console.log(((arrList[i] + arrList[i]) * 5 - arrList[i])/arrList[i]) if(i == arrList.length - 1){ return } i++ testFun(i) } testFun(0) console.timeEnd("递归遍历") } forTest() recursive()
运行结果:

运行结果
可以看到,for循环去遍历一个数组和用递归遍历去遍历同一个数组得到的结果一样,耗时也几乎相同。但是写法上有很大区别。
递归特点
每个递归都有一个结束递归的条件,上例中的:if(i == arrList.length - 1){ return }。每一个递归都会在函数内部把函数本身调用一次,但是函数在每次运行的时候,都会发生一些变化,用来触发递归的结束,上例中,testFun函数在内部调用了自己,并且每次调用i的值会+1,最终触发了结束条件,让递归结束。