そのため、数値が味気ないかどうかを判断するプログラムを作成する任務を負っています。つまり、たとえば 57 という数字に、各桁の 2 乗を足すと、5*5 + 7*7 となり、新しい数字は 74 になります。そして、数字が味気ないことを意味する58を取得するか、数字が味気ないことを意味する1を取得するまで、それを続けます。58 は、常に 58 で終わるシーケンスを繰り返すだけです。
だから私はいくつかの基本的な再帰でそれを試みたかったのですが、おそらくここでの再帰の使用を誤解しています.
私が書いた2つの関連するメソッドは次のとおりです。
public static boolean insipid(int num){
int dig1 = 0, dig2 = 0, dig3 = 0; // num = 159 for example, dig1 would be 1. Default is 0 in case of a 2 digit number, dig1*dig1 = 0
if(num == 58){ //The number is not insipid
return false;
}
if(num == 1){ // the number is insipid
return true;
}
if (num < 10){
insipid(num * num);
}
if(num>99){
dig1 = (int)(num / 100);
dig2 = (int)((num - 100)/10);
dig3 = num - (((int)(num / 10))*10);
insipid(squaresum(dig1,dig2,dig3));
}
else{
dig2 = (int)(num/10); //the 10s place
dig3 = num - (((int)(num/10)) * 10); // the 1's place
insipid(squaresum(dig1, dig2,dig3)); //dig1 = 0 so I just pass it along with it.
}
}
public static int squaresum(int dig1, int dig2, int dig3){
//Returns the sum of three digits squared.
return (dig1 * dig1) + (dig2 * dig2) + (dig3 + dig3);
}
Insipid() は、数値を指定するたびにブール値を返さなければならないというエラーが表示されます。しかし、与えられた数値は常に最終的に 58 または 1 に解決されることを知っています。したがって、ブール値が返され、エラーが無効になるように、常に true または false が返されるべきではありませんか? 明らかにこれは事実ではありませんが、私はそれをどのように見ていますか。ここでの再帰の使用は無効ですか?
また、これをクリーンアップする方法について何か提案があれば、厳しい批判を気にしません。私の Java はあまり良くありません。