限定しりとり

こんにちは、いつもお世話になっています。この間、因数分解のメソッドを作ったのですが

static void recFactorizeAux(int n, int i)
{
if(n == 0)
{}
else
  {
if (n % i == 0)
   {
System.out.print(i + " ");
recFactorizeAux(n/i, i);

}
else
   {             recFactorizeAux(n, i+1);
}
}
}

このように作りました。これで

i = 2; //iに2を代入して

recFactorizeAux(12, i);
このように呼び出すと、結果が
2 2 3
と出るようになっているんですが、この結果が、数字が小さい順に出るようになっているのを、大きい順に出るようにしたいんです。上の結果ならば、
3 2 2
となるように。
ずーっと悩んでいたんですが、初心者の自分ではもう出来なさそうなので、わかる方がいたら、ぜひ教えていただきたいのです。考えすぎて、ますますどつぼにはまってしまっているのかもしれません。
どうかよろしくお願いします。

A 回答 (1件)

なるべくもとのを活かすとしたら、こんな感じでしょうか


----------------------------------------------------------------
public class Factor {
static void recFactorizeAux(int n, int i){
int value=0;
if(n != 0 && n >= i){//オリジナルで再帰の終了条件が入っていないので修正
if (n % i == 0){
value = i;
recFactorizeAux(n/i, i);
} else {
recFactorizeAux(n, i+1);
}
}
if (value != 0){
System.out.print(value + " ");
}
}

public static void main(String arg[]){
recFactorizeAux(12,2);
}
}
    • good
    • 0
この回答へのお礼

バッチリ求めていたものそのものです!本当に助かりました。ありがとうございました。
わたし昨日今日と合わせて7,8時間程ずっとこの解決策を考えてて、それでもだめだったんです。
それをちょちょいと出来てしまうなんて、やはり熟練してる人は違いますね。私も少しでもそれに近づけるよう頑張ります!本当にありがとうございました!!

お礼日時:2006/07/18 13:59

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!