teratail header banner
teratail header banner
質問するログイン新規登録
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

1回答

1118閲覧

再帰呼びだしについて

prog1717nm

総合スコア56

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

1クリップ

投稿2017/11/04 09:36

0

1

java

1void calculate(int a, int b, int c){ 2//何らかの処理 3 4calculate(a+1,b+1,c+1);//再帰呼び出し 5calculate(a-1,b-1,c-1); 6 7} 8void main{//mainメソッド 9calculate(2,2,2); 10}

再帰呼び出しについて疑問があるので質問させてください。上のプログラムでは、calculateメソッドと、mainメソッドの2つのメソッドがあります。mainメソッドではまず、引数をa=2とb=2とc=2としてcalculateメソッドで呼び出しています。そうすると、calculateメソッドでは何らかの処理をし、今度は、a=3,b=3,c=3で再帰呼び出しをします。しかし、そうすると、2つめの再帰呼び出しはいつ行われるのでしょうか。1つめの再帰呼び出しが停止してからですか?再帰呼び出しは、処理の部分で何らかの条件で止めます。
また、最初に引数a=2とb=2とc=2としてcalculateメソッドを呼び出しましたが、そのaとbとcの値のままcalculate(a-1,b-1,c-1)を呼び出すにはどうしたら良いですか?つまり、最初に引数a=2とb=2とc=2でcalculateメソッドを呼ぶと、最初のcalculate(a+1,b+1,c+1)の部分の再帰呼び出しで、aとbとcの値がリセットされてしまうと思うのですが、それを阻止する方法というのはないのでしょうか。
なるべく配列などは使わない方向でいきたいです。長文で質問分かりづらくて、プログラムもあまり具体的でなくてすみません。よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

わかりやすく考えるために、「再帰呼び出し」という特殊な呼び出し方と捉えるのではなく、「たまたま同じ名前のメソッドを呼び出しただけ」と考えてください。Javaの場合はそう捉えて全く問題ありません。

2つめの再帰呼び出しはいつ行われるのでしょうか。1つめの再帰呼び出しが停止してからですか?

はい、ふつうのメソッド呼び出しと同様、1つ済んでから次へ進みます。

そのaとbとcの値のままcalculate(a-1,b-1,c-1)を呼び出すにはどうしたら良いですか?

そのままで問題ありません。同じメソッドでも、ローカル変数は実行ごとに別物になります(プリミティブなintなので、「状態変化」を考える必要もありません)。

投稿2017/11/04 10:58

maisumakun

総合スコア146659

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.30%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問