我想撰寫一個接收數字和數字的遞回方法。該方法應回傳第二個數字,該數字僅由第一個引數的可被第二個引數整除的數字組成。
例如,如果使用 number = 5369405 和 digit = 5 呼叫該方法,則它應該回傳 505。
到目前為止,我已經撰寫了以下方法,但它不起作用,因為索引保持在 -1,我想在每次遞回期間保存它的值。我的想法是保存這些值來構造回傳的數字。
誰能告訴我如何在每次遞回期間保存索引以防止它回傳-1?
這是我寫的代碼:
public static int subNumber(int num, int digit)
{
int index=-1;
if(num <10)
{
if(num%digit==0){
index ;
return num*(int)Math.pow(10,index);
}
else{
return 0;
}
}
int mod=(num%10);
if(mod % digit ==0)
{
index ;
return mod*(int)Math.pow(10,index) subNumber(num/10,digit);
}
else{
return 0 subNumber(num/10,digit);
}
}
uj5u.com熱心網友回復:
正如@markspace 在評論中所建議的那樣,您還應該將索引傳遞給您的方法以跟蹤每個可分割數字的位置,以便正確計算它們在最終數字中的權重。
此外,在設計遞回方法時,您應該首先確定您的基本情況。在這種情況下,您的基本情況是:
傳遞的數字小于要除的數字。
傳遞的數字等于要除以的數字。
此外,用戶可以傳遞不一致的索引(除零之外的任何值)。通常在這些情況下,當用戶應該傳遞僅用于幫助您進行遞回計算的引數時,您應該隱藏實際的遞回方法并僅提供它的客戶端版本。基本上,此客戶端版本僅使用正確的引數呼叫正確的遞回方法,以避免誤用。
一種方法解決方案
public static int subNumber(int num, int digit, int index) {
//Base case where num is smaller than than the digit to divide with
if (num < digit) {
return 0;
}
//Base case where num corresponds to digit and therefore is divisible
if (num == digit) {
return num * ((int) Math.pow(10, index));
}
//Retrieving the less significant digit
int modDigit = (num % 10);
//If the current mod digit is divisible by digit then its i-th position is defined and the later call results are added to it
if (modDigit % digit == 0) {
return modDigit * ((int) Math.pow(10, index)) subNumber(num / 10, digit, index 1);
}
//Proceeding with the recursion without adding a value to sum (conceptually should be return 0 subNumber(...))
return subNumber(num / 10, digit, index);
}
客戶端方法解決方案
public static int subNumberClient(int num, int digit){
return subNumber(num, digit, 0);
}
private static int subNumber(int num, int digit, int index) {
//same implementation but with private access modifier
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/470050.html