0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

初めに

再帰処理を学んだので自分のためにメモとして残しておきます
あまり使ったことが無かったので新鮮でした

再帰処理とは

再帰処理とは、ある関数の中で、関数自信を呼び出すこと
再帰関数は、再帰処理が書かれている関数のこと

簡単な例です(サンプルプログラムを載せていますが、これだけでは動きません)

sample.java
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)としています
もし、この条件が無かった場合はどうなるでしょうか

sample.java
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文の条件に引っかからず永遠と続いてしまいます

sample.java
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 ...

となってしまい続いてしまいます

このように条件を間違えれば永遠と再帰処理が続いてしまうため(無限ループ)、使用する際は終了する条件が揃っているか注意する必要があります

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?