初めに
再帰処理を学んだので自分のためにメモとして残しておきます
あまり使ったことが無かったので新鮮でした
再帰処理とは
再帰処理とは、ある関数の中で、関数自信を呼び出すこと
再帰関数は、再帰処理が書かれている関数のこと
簡単な例です(サンプルプログラムを載せていますが、これだけでは動きません)
class Main{
public static int Sample(int day){
if (day <= 0) {
return 1;
}
return Sample(day -1) * 2;
}
}
日ごとに2倍になっていくプログラムです
day = 3の時を考えます
Sample(3)
の場合
if文の条件には引っかかりません
return Sample(2) * 2となります
Sample(2)
の場合
if文の条件には引っかかりません
return Sample(1) * 2 となります
Sample(1)の場合
if文の条件には引っかかりません
return Sample(0) * 2となります
Sample(0)の場合
if文の条件に引っかかります
この時、1を返します
Sample(3)をもう一度考えると
Sample(3) =
Sample(2) * 2 =
Sample(1) * 2 * 2 =
Sample(0) * 2 * 2 * 2 =
1 * 2 * 2 * 2 =
8
となります
気を付けること
再帰処理をするときに気を付けることがあります
① if文の条件を書くこと
② 2個目のreturn文でdayを1引くこと
①
if文の条件で (day<=0)としています
もし、この条件が無かった場合はどうなるでしょうか
class Main{
public static int Sample(int day){
return Sample(day - 1) * 2;
}
}
dayは永遠にマイナスをされます
Sample(0) * 2 * 2 * 2 * 2
Sample(-1) * 2 * 2 * 2 * 2 * 2
Sample(-2) * 2 * 2 * 2 * 2 * 2 * 2
...
と永遠に続いてしまいます
どこかで再帰処理を終わらせる必要があります
②
①と似ていますが、day-1をしないことでif文の条件に引っかからず永遠と続いてしまいます
class Main{
public static int Sample(int day){
if (day <= 0) {
return 1;
}
return Sample(day) * 2;
}
}
Sample(3)とした場合
Sample(3) =
Sample(3) * 2 =
Sample(3) * 2 ...
となってしまい続いてしまいます
このように条件を間違えれば永遠と再帰処理が続いてしまうため(無限ループ)、使用する際は終了する条件が揃っているか注意する必要があります