1
1

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 5 years have passed since last update.

【Java】再帰処理を使ってFizz Buzz問題を解いてみる

1
Posted at

はじめに

  • 以前に「【Java】Fizz Buzz問題を解いてみる」を投稿した後、もう少し別の書き方が出来ないかと考えていました。
  • 「判定する数が1ずつ増えていく」という点に着目すると、再帰処理が使えそうだと思ったので試してみました。

作成したコード

  • 最初のif (end > 1) {...}という条件分岐で、end==1の時にはこれ以上再帰処理に入らないようにしています。
  • 「最初のプレイヤーは『1』と数字を読み上げる」というFizzBuzzのルールに合致しています。
FizzBuzz2.java
/**
 * 再帰処理を活用した方法。
 * @param end FizzBuzzを終える数。
 */
public static void useRecursion(int end) {
	if (end > 1) {
		useRecursion(end - 1);
	}

	if (end%3==0 && end%5==0) {
		System.out.println("Fizz Buzz");
	} else if (end%3==0) {
		System.out.println("Fizz");
	} else if (end%5==0) {
		System.out.println("Buzz");
	} else {
		System.out.println(end);
	}
}
実行結果(※引数endに20を指定した時)
1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
Fizz Buzz
16
17
Fizz
19
Buzz

まとめ

  • 再帰処理を活用してFizzBuzz問題を解くことができました。
  • ただし引数endが大きくなると、再帰処理(再帰関数)の呼び出し回数も大きくなるため、スタックオーバーフローの危険性が出てくると思います。
1
1
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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?