[JavaScript]再帰関数
6102 ワード
さいきかんすう
再帰関数について説明します.
再帰関数は自分を呼び出す関数です.
関数自体で自分を呼び出し、その中で再び自分を呼び出す...缲り返して
再帰関数は,再帰を停止するbasecaseと,自身を再呼び出しする再帰caseに分けられる.
次のコードは、再帰関数のデフォルトテンプレートです.
再帰関数テンプレート
次のコードは再帰関数のデフォルトテンプレートと言える.function recursive(input1, input2, ...) {
// 재귀의 기초 (base case)
if (문제를 더 이상 쪼갤 수 없을 경우) {
return 단순한 문제의 해답;
}
// recursive Case
// 그렇지 않은 경우
return 더 작은 문제로 새롭게 정의된 문제
// 예1. someValue + recursive(input1Changed, input2Changed, ...)
// 예2. someValue * recursive(input1Changed, input2Changed, ...)
}
basecaseでは、問題が分裂しない場合は、単純な値を返します.
そうでなければ、同じ演算を実行する必要がある場合は、関数自体を再度呼び出します.recursive caseで発生します.
フィボナッチ数列
0番目は0、1番目は1、2番目の最初の2つの数を加算した数列です.
再帰関数の代表的な例であるフィボナッチ数列を見てみましょう.
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, ...
次のコードは、フィボナッチ数列のnum番目の数を検索するコードです.function fibonacci(num) {
// 0번째와 1번째는 0, 1로 고정되어 있으므로, 숫자 자신을 리턴해줍니다.
if (num <= 1) {
return num;
}
// 2번째 부터는 본인 자신을 호출합니다.
return fibonacci(num-2) + fibonacci(num-1);
}
ハノイの塔材貴関数
再帰関数のもう一つの例ハノイのtopアルゴリズム.
ハノイのtopアルゴリズムは、「アルゴリズム」タブに再アップロードされます.
次はコードのみを残しますfunction hanoi(num, from, to, other) {
if (num === 0) return;
hanoi(num-1, from, other, to);
console.log(`${from}번에서 ${to}로 옮긴다.`);
hanoi(num-1, other, to, from);
}
hanoi(4, 0, 1, 2);
Reference
この問題について([JavaScript]再帰関数), 我々は、より多くの情報をここで見つけました
https://velog.io/@still3028/JavaScript-재귀함수
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
function recursive(input1, input2, ...) {
// 재귀의 기초 (base case)
if (문제를 더 이상 쪼갤 수 없을 경우) {
return 단순한 문제의 해답;
}
// recursive Case
// 그렇지 않은 경우
return 더 작은 문제로 새롭게 정의된 문제
// 예1. someValue + recursive(input1Changed, input2Changed, ...)
// 예2. someValue * recursive(input1Changed, input2Changed, ...)
}
function fibonacci(num) {
// 0번째와 1번째는 0, 1로 고정되어 있으므로, 숫자 자신을 리턴해줍니다.
if (num <= 1) {
return num;
}
// 2번째 부터는 본인 자신을 호출합니다.
return fibonacci(num-2) + fibonacci(num-1);
}
function hanoi(num, from, to, other) {
if (num === 0) return;
hanoi(num-1, from, other, to);
console.log(`${from}번에서 ${to}로 옮긴다.`);
hanoi(num-1, other, to, from);
}
hanoi(4, 0, 1, 2);
Reference
この問題について([JavaScript]再帰関数), 我々は、より多くの情報をここで見つけました https://velog.io/@still3028/JavaScript-재귀함수テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol