[TS] 정당명으로 배우지 않는 귀속 함수
16920 단어 TypeScripttech
개시하다
갑작스럽습니다. 다음 기사를 보셨습니까?
※ 수열이나 점화식 같은 고등학교 수학 지식(없더라도)이 있다면 즐겁게 읽을 수 있으니 추천합니다.
그중에
Perl
에 기재된 다음과 같은 코드가 있다.# 引用:https://qiita.com/MirrgieRiana/items/da7dade622770a04d8f7
sub N {
my $n = shift;
return $n == 0 ? "国民"
: $n == 1 ? "NHK"
: N($n - 1)."から".N($n - 2)."を守る党";
}
print N(4), "\n";
'NHK로부터 국민을 보호하는 당'이라는 문자열을 기점으로 점화식으로 표현한 경우N(0)=国民
및 N(1)=NHK
N(2)=N(1)からN(0)を守る党
N(3)=N(2)からN(1)を守る党
N(n)=N(n−1)からN(n−2)を守る党
이거 보고'이거 컴백 함수 장르로 좋지 않나요?'내 생각엔
예전에는 회사 신입에게 회귀 함수를 설명하면서'임의의 깊이의 디렉터리를 다시 탐색하는 프로그램'이라고 적어 설명했지만, 내용이 재미가 부족해 인기가 없었다.
이런 점에서 이 제재는 출력 내용의 화면에서도 재미있기 때문에 회귀함수라는 내용에 초점을 맞추고 싶습니다.
그나저나
Perl
에 익숙하지 않아서 자신 있는Typescript
로 기재하기로 했습니다.도대체 회귀 함수는 무엇입니까?
귀속 위키백과에는 다음과 같은 내용이 설명되어 있습니다.
귀환이란 어떤 사물을 묘사할 때 묘사한 자신에 대한 인용이 그 묘사에 나타나는 것을 말한다.
따라서 귀속 함수는'함수에서 함수 자체를 호출하는 함수'를 가리킨다.
"이게 무한 순환이 되지 않나요?"이렇게 생각하는 사람은 매우 예민하다.
명확한 정의가 있어야 한다고 생각하지만 무한순환에 빠지지 않기 위해 회귀함수는 다음과 같은 조건을 충족시켜야 한다.
귀속 처리의 끝 절차를 준비했다
귀속 함수를 사용하여
10
부터 0
까지 카운트다운을 하면서 컨트롤러에 표시된 프로그램의 예를 고려하십시오.const rec = (i: number): void => {
// iが0未満になったら終了
if(i < 0) return;
// iをコンソールに表示
console.log(i);
// iをデクリメントして再帰呼び出し
rec(i-1);
}
출력 결과는 다음과 같다.10
9
8
7
6
5
4
3
2
1
0
코드 중의 if(i < 0) return;
는 절차를 끝낸다.이 지점이 없었다면
i
은 무한히 감소-1,-2,-3
했을 것이다.※ 수치상 비트수 경계가 있어 엄밀히 말하면'무한 체감'
rec()
은 아니지만, 무한 호출로 끝나지 않습니다.따라서 귀속 함수를 고려할 때 반드시'귀속 함수 처리 중지'를 준비해야 한다.
대략적인 귀속 처리는 수치와 관련이 있다고 생각하기 때문에'계수기 처리의 수치가 일정한 조건에 이르면 끝난다'는 경우가 비교적 많다.
처음에 말한'디렉터리의 귀속 탐색'에서'중첩 디렉터리가
null
로 변할 때'가 끝 조건이다.특정 정당 이름의 귀속 함수를 Typescript로 재현하다
오프닝이 길어진 게 본론입니다.
원래의 보도를 본뜨다
N(0)=国民
N(1)=NHK
N(2)=N(1)からN(0)を守る党
N(n)=N(n−1)からN(n−2)を守る党
const nhk = (n: number): string => {
// 終了条件①
if(n===0) return '国民';
// 終了条件②
else if(n===1) return 'NHK';
// 再帰呼び出し
else return `${nhk(n-1)}から${nhk(n-2)}を守る党`;
}
console.log(nhk(0));
// -> 国民
console.log(nhk(1));
// -> NHK
console.log(nhk(2));
// -> NHKから国民を守る党
console.log(nhk(3));
// -> NHKから国民を守る党からNHKを守る党
수치형이라면 무엇이든 보낼 수 있기 때문에 엄밀히 말하면 n < 0
도 고려해야 하는데 Typescript
로 원코드를 재현하면 이렇게 된다.귀속 호출 단계
n
에서 2를 빼는 두 가지 종료 조건이 있다.이렇게 하면
Typescript
어떤 정당의 이름을 다시 처리하는 함수를 만들 수 있다.경품'뭘 보호하고 있는지 쉽게 알 수 있게'.
학습귀속함수로서의 교재는 충분한데 이전
nhk
이 매개 변수10
로 집행되었다면 결과는 다음과 같다.console.log(nhk(10));
출력
NHKから国民を守る党からNHKを守る党からNHKから国民を守る党を守る党からNHKから国民を守る党からNHKを守る党を守る党からNHKから国民を守る党からNHKを守る党からNHKから国民を守る党を守る党を守る党からNHKから国民を守る党からNHKを守る党からNHKから国民を守る党を守る党からNHKから国民を守る党からNHKを守る党を守る党を守る党からNHKから国民を守る党からNHKを守る党からNHKから国民を守る党を守る党からNHKから国民を守る党からNHKを守る党を守る党からNHKから国民を守る党からNHKを守る党からNHKから国民を守る党を守る党を守る党を守る党からNHKから国民を守る党からNHKを守る党からNHKから国民を守る党を守る党からNHKから国民を守る党からNHKを守る党を守る党からNHKから国民を守る党からNHKを守る党からNHKから国民を守る党を守る党を守る党からNHKから国民を守る党からNHKを守る党からNHKから国民を守る党を守る党からNHKから国民を守る党からNHKを守る党を守る党を守る党を守る党からNHKから国民を守る党からNHKを守る党からNHKから国民を守る党を守る党からNHKから国民を守る党からNHKを守る党を守る党からNHKから国民を守る党からNHKを守る党からNHKから国民を守る党を守る党を守る党からNHKから国民を守る党からNHKを守る党からNHKから国民を守る党を守る党からNHKから国民を守る党からNHKを守る党を守る党を守る党からNHKから国民を守る党からNHKを守る党からNHKから国民を守る党を守る党からNHKから国民を守る党からNHKを守る党を守る党からNHKから国民を守る党からNHKを守る党からNHKから国民を守る党を守る党を守る党を守る党を守る党
이러면 뭘 지키고 있는지 몰라요.사람은 보호할 것이 있어야 강해지기 때문에 무엇을 보호해야 하는지 분명히 해야 한다.
복잡한 구조로 보이지만'A에서 B보호당으로'라는 일본어로 구성은 간단할 것으로 보인다.
따라서 방금 전의 함수만 약간 수정합니다.
수정 후
const nhk = (n: number, isChild?: boolean):string => {
return n===0? '国民'
:n===1? 'NHK'
:`${
(isChild?'':'「') +
nhk(n-1,true) +
(isChild?'':'」\n')
}から${
(isChild?'':'\n「') +
nhk(n-2,true) +
(isChild?'':'」\n')
}を守る党`
}
if...else
는 세 가지 연산자로 간소화를 대체했는데 요점은 두 번째 파라미터isChild
를 추가한 것이다.이것은 첫 번째 호출 중
undefiend
이고 귀속 호출 시true
의 값으로 실행 단계 함수 자체에서'현재 귀속 호출이 되고 있는지'를 이해할 수 있다.이렇게 하면 최상위 레벨에서 작업할 때 보호해야 할 객체와 보호해야 할 객체 사이에 괄호를 둘 수 있습니다.
console.log(nhk(10));
수정 후 내보내기
「NHKから国民を守る党からNHKを守る党からNHKから国民を守る党を守る党からNHKから国民を守る党からNHKを守る党を守る党からNHKから国民を守る党からNHKを守る党からNHKから国民を守る党を守る党を守る党からNHKから国民を守る党からNHKを守る党からNHKから国民を守る党を守る党からNHKから国民を守る党からNHKを守る党を守る党を守る党からNHKから国民を守る党からNHKを守る党からNHKから国民を守る党を守る党からNHKから国民を守る党からNHKを守る党を守る党からNHKから国民を守る党からNHKを守る党からNHKから国民を守る党を守る党を守る党を守る党からNHKから国民を守る党からNHKを守る党からNHKから国民を守る党を守る党からNHKから国民を守る党からNHKを守る党を守る党からNHKから国民を守る党からNHKを守る党からNHKから国民を守る党を守る党を守る党からNHKから国民を守る党からNHKを守る党からNHKから国民を守る党を守る党からNHKから国民を守る党からNHKを守る党を守る党を守る党を守る党」
から
「NHKから国民を守る党からNHKを守る党からNHKから国民を守る党を守る党からNHKから国民を守る党からNHKを守る党を守る党からNHKから国民を守る党からNHKを守る党からNHKから国民を守る党を守る党を守る党からNHKから国民を守る党からNHKを守る党からNHKから国民を守る党を守る党からNHKから国民を守る党からNHKを守る党を守る党を守る党からNHKから国民を守る党からNHKを守る党からNHKから国民を守る党を守る党からNHKから国民を守る党からNHKを守る党を守る党からNHKから国民を守る党からNHKを守る党からNHKから国民を守る党を守る党を守る党を守る党」
を守る党
그렇구나.그렇다면 지켜야 할 것이 무엇인지(잘 모르겠다).
Reference
이 문제에 관하여([TS] 정당명으로 배우지 않는 귀속 함수), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/nekoniki/articles/60c3c629d5fc92aa2e06텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)