全面掌握递归

定义:

  狭义上的递归就是函数自己调用自己。广义上的递归可以吧一个问题分为若干个小问题,逐个的解决小问题。

 

条件:递归方程和递归结束条件

 

一. 求n的阶乘

1
2
3
4
5
6
functin factorial(n){
  //终止条件
  if(n===1) return 1
  //递归方程
  return n * factorial(n-1)
}

二. 经典案例——斐波那契数列

1
2
3
4
5
function fibonacci(n){
  if(n<=1) return n
  //每一项等于前两项的和
  return fibonacci(n-1) + fibonacci(n-2)
}

  

三. 用递归求数组最大值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//用递归求数组最大值
const arr = [8,5,33,77,11,35,73,146,4,2]
 
function findMax(arr){
  //终止条件
  if(arr.length === 1) return arr[0]
  //将数组从中间分开
  const half = Math.floor(arr.length/2)
  //分开对比
  const left = arr.slice(0,half)
  const leftMax = findMax(left)
   
  //右边
  const right = arr.slice(half,arr.length-1)
  const rightMax = findMax(right)
   
  if(leftMax > rightMax){
    return leftMax
   }else{
    return rightMax
   }
}

  


四. 开发中的递归,利用数组获取子菜单的数据

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
let nameItem = []
function getName(values) {
  values.forEach((item)=> {
    if(item.children) {
      getName(item.children)
    }else {
      nameItem.push(item.name)
    })
    return nameItem
}
const items = getName(data)
console.log(items)
  ['青苹果''红苹果',
    '北方米饭','南方米饭',
    '联想电脑','苹果电脑',
    '锄头','锤子',
    '洗发水','沐浴露'
   ]

  

posted @   嘿嘿小黑  阅读(21)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)
点击右上角即可分享
微信分享提示