TIL[再帰関数]



さいきかんすう


再帰関数は、関数が自分で停止するまで呼び出される関数です.そしてこの技術を「再帰」と呼ぶ.recures()という関数があると仮定します.
function recurse() {
        .
        .
        .
    recurse(); 
}

再帰関数の特徴


1.再帰関数には、常に繰り返しを停止する条件文が必要です。そうでなければ、この関数は無期限に繰り返されます。

function recurse() {
    if(condition) {
    // 반복을 멈추게 하는 조건문이 꼭 필요하다.
        
    } else {
        recurse();
    }
}
function countDown(num){
    for (let i = num; i >= 1; i--){ // 이게 반복을 멈추게 하는 조건문인 셈
        console.log(i);
    }
}
このようにfor moonやwhile moonもよくどこまで繰り返されるのか、その条件が加わるので無限に繰り返されることはなく、目的を達成するときは自分で止めてしまいます.このような再帰関数は重複文と多くの類似点がある.

2.再帰関数は、通常、大きな問題を小さな問題に分けるために使用されます。ツリー、図、アルゴリズムなど、将来学習するデータ構造によく使用されます。


再帰関数の例


1.再帰関数を使用した3から1までの例

// 수도 코드
// 1. 우선 함수에 숫자3을 인자로 넣어준다.
// 2. 3을 보여준다.
// 3. 함수에 숫자 2를 인자로 넣어준다.
// 4. 2를 보여준다.
// 5. 함수에 숫자 1을 인자로 넣어준다.
// 6. 1을 보여준다.

function countDown(fromNumber) {
    console.log(fromNumber);
    countDown(fromNumber-1);
}
countDown(3);
しかし、現在完了しているコードは1で停止するのではなく、無限に繰り返されます.条件文を書いていないからです.
function countDown(fromNumber) {
    console.log(fromNumber);

    let nextNumber = fromNumber - 1;

    if (nextNumber > 0) { // 반복을 멈추는 조건문
        countDown(nextNumber);
    }
}

countDown(3);
今度は彼に条件文を書いた.0より大きい数値でのみ繰り返します.

2.n-factorial(n!)として数を入力します。戻り値の例

function factorial(num) {
  // 1. num을 받는다
  // 2. num을 num * (num-1) * (num-2) * ...(num - (num-1))
  if (num <= 1) return 1; // 브레이크 역할 num <= 1 이면 1을 리턴하고 멈춘다
  return num * factorial(num - 1); // 결과값
}
1つ目の例とは異なり、値を蓄積する必要がある場合は、蓄積する値(num)と繰り返す再帰関数(num-1)がreturnに追加されます.
ソース:
https://www.javascripttutorial.net/javascript-recursive-function/