소백안의 귀속
귀환에 대해 주로 두 가지 부분이 있는데 첫째, 어떤 상황에서 귀환을 사용할 수 있는지, 둘째, 왜 귀환에서 항상return을 사용하는지 잘 모르겠다.
먼저 가장 간단한 계산 곱셈의 예로부터 말하자면
function factorial (n) {
if (n === 1) {
return 1
}
return n * factorial(n - 1)
}
console.log(factorial(3))
실행 순서:
factorial(3) ==> 3 * factorial(2) ==> 3 * 2 * factorial(1) ==> 3 * 2 * 1
factorial(3)을 실행할 때return3*factorial(2)에서의return이 없으면factorial(3)는 되돌아오는 값이 없다. 내부에서 어떻게 돌아가든지 그 값은undefined이다.
다음은 왜 귀환을 사용할 수 있는지 다시 한 번 말씀드리겠습니다.하나의 큰 문제를 작은 문제로 분해할 수 있고 작은 문제의 방법과 큰 문제의 방법은 같다. 단지 규모가 다르지만 또 하나는 지난번의 계산 결과를 사용하는 것이다. (이점에 관해서는 두 가지 상황이 있다. 하나는 위에서 계산한 곱셈을 직접 이용하는 예이고 다른 하나는 직접 이용하지 않는 것이다. 아래의 예는 바로 이런 상황이다) 그러면 귀속을 고려할 수 있다.
다음은 리코드에서 17번 전화번호의 알파벳 조합을 예로 들자.우리가 관심을 가지는 부분만 말하자면 전화번호의 2-9 숫자는 숫자마다 3개나 4개의 영문 자모에 대응한다. 사용자가 2-9의 몇 개의 숫자로 구성된 문자열을 입력한 후에 우리는 이 몇 개의 숫자에 대응하는 자모를 조합하여 숫자마다 하나의 자모를 내야 한다.
예제
:"23"
:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].
먼저 맵 수조를 만들어서 숫자와 알파벳 사이의 매핑을 만들고 전송된 숫자 문자열을 분석하여 대응하는 알파벳을 수조코드에 저장합니다. 예를 들어 '23'=>['abc','def'].전송된 숫자의 개수는 무작위이기 때문에 코드수 그룹의 앞의 두 항목의 자모를 조합한 후 tmp수 그룹에 저장하고code.splice(0,2,tmp)는 코드의 앞의 두 항목을 tmp로 바꾸고 코드 그룹의 길이가 1인지 판단하며, 그렇지 않으면comb 함수(귀속)를 계속 호출하여 이전에 조합된 자모와 뒤의 자모를 조합하고, 1이면 조합이 완료된 것을 설명한다.
const f = (str) => {
// , map[2] 2
let map = ['', 1, 'abc', 'edf', 'ghi', 'jkl', 'mno', 'pqrs', 'tuv', 'wxyz']
// , '234' ['2', '3', '4']
let num = str.split('')
// , '23'=>['abc', 'def']
let code = []
num.forEach(item => {
// , 0 1
if (map[item]) {
code.push(map[item])
}
})
const comb = (code) => {
let tmp = []
for (let i = 0, il = code[0].length; i < il; i++) {
for (let j = 0, jl = code[1].length; j < jl; j++) {
tmp.push(`${code[0][i]}${code[1][j]}`)
}
}
code.splice(0, 2, tmp)
if (code.length <= 1) {
return code[0]
} else {
return comb(code)
}
}
console.log(comb(code))
}
f('234')
왜 comb(code) 앞에return을 넣을까요?이 이해는 위의 예보다 이해하기 쉽다. 리턴을 넣을 필요가 없을 것 같지만 사실은 그렇지 않다.
우선 집행 순서를 적어두고,
: comb(['abc', 'def', 'ghi']) =>
: comb([['ad', 'ae', 'af', 'bd', 'be', 'bf', 'cd', 'ce', 'cf'], 'ghi'])
두 번째 comb 함수를 실행할 때 for 순환과 splice를 실행한 후 코드의 길이가 1이 됩니다. 이때 ['ageg','aeh','aeh','aei','adg','adh','adi','afg','afh','afi','beg','beg','beh','bei','bdg','bdg','bdh','bdi','bfg','bfffh','bfi','bfig','bg','bg','cg','cg','cg','cg','hh','cg','cg','cg','cg','cg','cg','cg','cg','cg','cg','cg','c,'cfg','cfh','cfi'].
이것은 두 번째 comb 함수 반환 결과입니다. 만약returncomb () 를 추가하면 첫 번째 호출 반환 결과는 두 번째comb 함수 집행 결과입니다. 만약return이 없다면, 첫 번째 호출 결과는undefined입니다.
귀환에서 종지 조건을 충족시켜 귀환하는 값은 모두 마지막으로 귀환 함수를 호출하여 집행한 결과이다. 최내층 귀환 함수의 집행 결과는 최외층 귀환 함수로 귀환하려면 각 층 귀환 함수에return을 추가해야만 된다.
요컨대, 귀속 함수가 마지막으로 결과를 되돌려 주기를 원한다면, 각 층의 귀속 함수는 반드시return을 넣어야만 내부 함수의 결과를 가장 바깥쪽 귀속 함수로 되돌릴 수 있다.
다음에 다시 한 번 말씀드리지만 왜 귀환을 사용할 수 있습니까?사용자가 입력한 숫자 문자열 중 숫자의 개수는 알 수 없지만 항상 두 알파벳 문자열을 조합할 수 있다(큰 문제와 작은 문제의 해결 방법은 일치한다). 먼저 두 알파벳 문자열을 조합하고 세 알파벳 문자열이 있으면그러면 앞의 두 조합 후의 결과를 수조의 앞의 두 항목(지난번에 귀속된 결과를 사용했음)으로 바꾸고 앞의 세 번째 알파벳 문자열과 조합한다.나머지 세 개의 알파벳 문자열은 동일합니다.
총결산하다
1) 큰 문제와 작은 문제의 해결 방법이 일치하고 지난번의 결과를 사용했다면 사용의 귀속을 고려할 수 있다.
2) 귀속 함수가 결과를 되돌려야 한다면, 귀속 함수를 호출할 때마다 앞에 리턴을 붙여야만 내부 함수의 귀환 결과를 최외층 함수로 되돌릴 수 있다.
3) 가장 바깥쪽 함수의 반환 결과는 모든 안쪽 함수의 집행이 끝난 후의 반환 결과이다.내층 함수는 외층 함수의 집행 내용으로 집행이 끝난 후에 최종적으로 되돌아오는 결과는 외층 함수의 집행 결과이다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.