![](/img/trans.png)
[英]How do I write a recursive method that takes as an input an ArrayList of Integers and returns the smallest integer?
[英]How to write a recursive method in java that takes in a positive or negative integer and returns the number of digits it has
我正在嘗試解決此問題:編寫一個遞歸方法,該方法返回作為整數類型的參數傳遞給它的整數中的位數。 允許正面和負面的論點。 例如,-120有三位數字。
這是我的代碼,但是當我嘗試通過121時,我總是得到1:
public static int recursion(int inNumber){
//create a counter variable for the total of digits
int totalDigits = 0;
//base case
if (inNumber < -10 || inNumber > 10){
totalDigits++;
return totalDigits;
//recursive case
}else{
totalDigits++;
return recursion(inNumber/10) + totalDigits;
}
}
使用Math.abs
試試這個簡化的代碼
public static void main(String[] args) {
System.out.println(recursion(123456, 0));
}
public static int recursion(int inNumber, int totalDigits){
totalDigits++;
if (Math.abs(inNumber) < 10){
return totalDigits;
}else{
return recursion(inNumber/10, totalDigits);
}
}
輸出
6
如果拿121,
int totalDigits = 0;
if (121< -10 || 121> 10){ // YES 121>10 then:
totalDigits++;
return totalDigits;
您的邏輯檢查它是否大於10,然后返回totalDigits(1)。 你想做的是相反的。 如果大於10,則調用相同的功能。 基本上,您的if / else剛好相反。
每次調用方法時,都要重置totalDigits的值,作為遞歸調用的一部分,應該將totalDigits影響到函數中,代碼應為
public static int recursion(int inNumber) {
//create a counter variable for the total of digits
//base case
if (Math.abs(inNumber)<10) {
return 1;
//recursive case
} else {
return recursion(inNumber / 10) + 1;
}
}
所以這是我修復此代碼的方式:
1:解決邏輯錯誤,並使用邏輯否定使代碼更具描述性。
public static int recursion(int inNumber) {
//create a counter variable for the total of digits
int totalDigits = 0;
//base case
if (!(inNumber <= -10 || inNumber >= 10)) { //notice the !
return totalDigits + 1;
//recursive case
} else {
totalDigits++;
return recursion(inNumber / 10) + totalDigits;
}
}
優化1 :您也可以擺脫局部變量totalDigits
因為它始終為1
:
public static int recursion(int inNumber) {
//base case
if (!(inNumber <= -10 || inNumber >= 10)) {
return 1;
//recursive case
} else {
return recursion(inNumber / 10) + 1;
}
}
優化2 :您可以使用Math.abs(int)
實現相同的Math.abs(int)
:
public static int recursion(int inNumber){
if (Math.abs(inNumber) < 10) { //base case
return 1;
} else { //recursive case
return recursion(inNumber / 10) + 1;
}
}
再次查看您的if條件。 121大於10,因此inNumber > 10
的條件為true,執行totaldigits++
,並且該方法返回1。
條件應if (inNumber > -10 && inNumber < 10)
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.