递归是不断的自己调自己。需要在满足终止条件的时候退出。
所以递归最重要的就是终止条件。
1.判断递归的条件是否达到某一个限定值。
2.运算的结果是否达到某个范围。
终止条件是定义在递归函数的内部,在递归调用前我们就要做的条件判断
//需求:用代码算出5的阶乘的结果。应该是5*4*3*2*1=120
function factorial(n){
//n===1就是终止条件
if(n===1) return 1
return n*factorial(n-1)
}
console.log(factorial(5))
函数调用的 本质是:压栈与出栈的操作。栈是属于先进后出的特点。
//需求:用递归得出斐波那契数列某一位的值(1,1,2,3,5,8,13,21,34,55)
funciton f(n){
if(n<=1) return n;
return f(n-1)+f(n-2)
}
console.log(f(5))//5
//需求:用递归求一个数组里的最大值
const arr=[1,2,3,10,109]
funciton findMax(arr){
if(arr.length===1) return arr[0]
//将数组从中间分开
const half=Math.floor(arr.length/2)
//分开对比
const left=arr.slice(0,half)
const lefttMax=finxMax(left)
const right=arr.slice(half)
const rightMax=finxMax(right)
if(leftMax>rightMax){
return leftMax
}else{
return rightMax
}
}
//树形组件获取children中的name
let arrName=[]
function getName(data){
if(data!=null&&data.length>0){
data.forEach((item)=>{
if(item.children){
getName(item.children)
}else{
arrName.push(item.name)
}
})}
return arrName
}
console.log(getName([{name:'123',children:[{name:'红苹果'}]},{name:'123',children:[{name:'大米'}]}]))