몇 가지 일반적인 JS 재귀 알고리즘
재귀의 개념
즉, 함수는 자신을 호출하거나 자신의 함수가 호출하는 종속 함수에서 자신을 호출합니다.
재귀 단계
- 재귀 함수가 작성되었다고 가정
- 재발을 찾고
- 반복 관계의 구조를 반복 본문으로 변환
- 재귀 본문에 중요한 조건 추가
클래식 사례 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>