몇 가지 일반적인 JS 재귀 알고리즘

몇 가지 일반적인 JS 재귀 알고리즘

재귀의 개념

즉, 함수는 자신을 호출하거나 자신의 함수가 호출하는 종속 함수에서 자신을 호출합니다.

재귀 단계

  1. 재귀 함수가 작성되었다고 가정
  2. 재발을 찾고
  3. 반복 관계의 구조를 반복 본문으로 변환
  4. 재귀 본문에 중요한 조건 추가

클래식 사례 1 : 합계

1-100의 합 구하기

function sum(n) {
  if (n == 1) return 1
  return sum(n - 1) + n
}
复制代码

전형적인 사례 2 : 피보나치 수열

1,1,2,3,5,8,13,21,34,55,89 ... n 번째 항목 찾기

// 递归方法
function fib(n) {
  if (n === 1 || n === 2) return n - 1
  return fib(n - 1) + fib(n - 2)
}
console.log(fib(10)) // 34

//非递归方法 //
function fib(n) {
  let a = 0
  let b = 1
  let c = a + b
  for (let i = 3; i < n; i++) {
    a = b
    b = c
    c = a + b
  }
  return c
}
console.log(fib(10)) // 34
复制代码

클래식 사례 3 : 계단 오르기

JS 재귀 계단에 n 개의 계단이 있다면 매번 1 ~ 2 보씩 걸을 수 있는데,이 n 개의 계단을 통과하는 방법은 몇 가지입니까?

function climbStairs(n) {
  if (n == 1) return 1
  if (n == 2) return 2
  return climbStairs(n - 1) + climbStairs(n - 2)
}
复制代码

클래식 사례 4 : 딥 카피

원리 : clone (o) = new Object; 객체를 반환합니다.

function clone(o) {
  var temp = {}
  for (var key in o) {
    if (typeof o[key] == 'object') {
      temp[key] = clone(o[key])
    } else {
      temp[key] = o[key]
    }
  }
  return temp
}
复制代码

클래식 사례 5 : 재귀 적 구성 요소

  • 재귀 구성 요소 : 구성 요소는 템플릿에서 자신을 재귀 적으로 호출 할 수 있으며 구성 요소에 이름 구성 요소를 설정하기 만하면됩니다.
  • 그러나 수를 제한하려면 조건을 지정해야합니다. 그렇지 않으면 오류가 발생합니다. 최대 스택 크기를 초과했습니다.
  • 구성 요소 재귀는 계층 관계를 알 수없는 일부 독립 구성 요소를 개발하는 데 사용됩니다. 예 : 캐스케이드 선택기 및 트리 제어
<template>
  <div v-for="(item,index) in treeArr"> {
   
   {index}} <br/>
      <tree :item="item.arr" v-if="item.flag"></tree>
  </div>
</template>
<script>
export default {
  // 必须定义name,组件内部才能递归调用
  name: 'tree',
  data(){
    return {}
  },
  // 接收外部传入的值
  props: {
     item: {
      type:Array,
      default: ()=>[]
    }
  }
}
</script>

추천

출처blog.csdn.net/wwf1225/article/details/115067402