さいきかんすう


再帰関数とは、自分の関数を呼び出すことです。


countFuncを作成して整数1~nを出力

function countFunc(n) {
  if(n>0) {
    console.log(n);
    countFunc(n-1);
  }
}

7をparameterとして実行しようとすると、

出力7、6、5、4、3、2、1.
コードには重複文がありません.どのように実行されますか?
コードの実行順序を1つずつ表示します.
//countFunc(7)
function countFunc(7) {
  if(7>0) {
    console.log(7);
    countFunc(7-1); //6
  }
}

//countFunc(6)
function countFunc(6) {
  if(6>0) {
    console.log(6);
    countFunc(6-1); //5
  }
}

//countFunc(5)
function countFunc(5) {
  if(5>0) {
    console.log(5);
    countFunc(5-1); //4
  }
}

//countFunc(4)
function countFunc(4) {
  if(4>0) {
    console.log(4);
    countFunc(4-1); //3
  }
}

//countFunc(3)
function countFunc(3) {
  if(3>0) {
    console.log(3);
    countFunc(3-1); //2
  }
}

//countFunc(2)
function countFunc(2) {
  if(2>0) {
    console.log(2);
    countFunc(2-1); //1
  }
}

//countFunc(1)
function countFunc(1) {
  if(1>0) {
    console.log(1);
    countFunc(1-1); //0
  }
}


//countFunc(0)
function countFunc(0) {
  if(0>0) { //false
    console.log(0);
    countFunc(0-1);
  }
}
countFunc(0)終了-->countFunc(1)終了-->countFunc(2)終了-->countFunc 3終了-->countFunc(4)終了-->countFunc(5)終了-->countFunc(6)終了-->countFunc(7)終了-->プログラム終了.

再帰関数を階乗で理解する


工場はn!=1 x 2 x 3 x ... x (n-1) x n
の積を表します.
1から自然数nの積.
0!1,1です!道1です.
0! = 1
1! = 1
2! = 1 x 2
n! = 1 x 2 x 3 x ... x (n-1) x n
再帰的に問題を解決し,解題法は同じ動作の形式で,より小さな問題を解決することによって局所的な問題を発見し,その後より大きな問題を解決する.
5!見ると5!=5 x 4 x 3 x 2 x 1ここで見ると4 x 3 x 2 x 1->この部分は4!この部分は3!2 x 1 --> 2! 1 --> 1! はい、確認できます.
ではn!(n工場)
n=0とn>0に分けることができますよね?
再帰関数には再帰を終了する条件が必要です.
したがって,再帰を終了する値が0または1の場合,再帰関数を終了するための条件を与える.
n=0はn!=1 (base case)
n>0はnを表します!=(n - 1)! x n (recursive case)
basecase:問題が小さい場合は、解決する必要がある問題の一部がなければ、それを使用します.
recursive caseがある限り、関数を再帰的に呼び出し続け、終了しないためbasecaseを使用する必要があります.
次の関数は計算工場の関数です.
function factorialFunc(n) {
  if(n === 0) {
      return 1;
  }
  return n * factorialFunc(n-1);    
}
FactorFunc(5)を入れて関数を実行してみます.
1 x 2 x 3 x 4 x 5を算出し、120を決定することができる.