工作中闭包使用很多,递归很少用到,但是也是都要掌握的
递归:函数自己调用自己,跟循环类似,他为了避免无限的递归,需要设置一个递归终止点
function sum(n){ //递归终止点 如果函数体内出现return,无论在return在哪里,return下面的代码都不会在执行 //函数里面return直接执行退出栈操作,所以下面的代码不会执行 if(n===1){ return 1; } //递归 return n+sum(n-1); } console.log(sum(10))
调用栈:
10+sum(9)
9+sum(8)
8+sum(7)
7+sum(6)
······
2+sum(1)
所有的递归都可以转换成循环的形式,但是有些时候循环不是那么直观
菲波那切数列使用递归实现
function fei(n){ if(n<=1){ return 1; } return fei(n-1)+fei(n-2); } console.log(fei(5)) //8