[英]Can anyone explain this code for me?
public int sumOfDigits(int num){
return num == 0 ? 0 : num % 10 + sumOfDigits(num/10);
}
這是數字總和的遞歸計算-只要您沒有消耗掉所有數字,它將最后一個與前面所有數字的總和相加。
sumOfDigits是一種接受int參數並且返回類型也是int的方法。 如果傳遞了0,則它將返回0,否則將返回num % 10 + sumOfDigits(num/10)
如果傳遞了非0的數字,則只要輸入的數字變為0,該數字就會繼續
return num == 0 ? 0 : num % 10 + sumOfDigits(num/10);
等效於:
if(num==0)
{
return 0;
}
else
{
return num % 10 + sumOfDigits(num/10); // this is recursive call. It gets called until num is reduce to 0
}
基本上計算如下:
如果num=768
result = 7+6+8
。
那是Java三元運算符。 它類似於其他語言中的三元運算符。 在這種情況下:
return <boolean expression> ? <if true> : <if false>;
您已經發布了一個遞歸算法來計算整數中的數字之和。
下面發布了兩種等效的方法:
public int sumOfDigitsIf(int num) {
if (num == 0) {
return 0;
} else {
return num % 10 + sumOfDigitsIf(num / 10);
}
}
public int sumOfDigitsLoop(int num) { // useful to examine if you aren't used to recursive algorithms
int value = 0;
while (num > 0) {
value += num % 10;
num /= 10;
}
return value;
}
此函數遞歸計算數字的總和。 首先,如果數字為0,則返回0,因為0的數字之和為0。然后,它計算num%為10的1s位置的數字,並將其加到其余數字的總和中個位,num / 10是剩余的位,它在該數字上調用sumOfDigits()。
此方法計算代表以10為基的整數的數字之和。 用%運算符遞歸調用該方法以分離數字中的數字,然后將它們相加以形成結果。
例如-234成2 + 3 + 4 = 9
但是,如果在以10為底的底數中傳遞整數,則該方法仍會以10為底數給出結果
例如sumOfDigits(0b1011010)
->答案是9以10為基數sumOfDigits(0x532)
->答案是7以sumOfDigits(0x532)
為基數
以下是對二進制和八進制值的更改,以獲取代表數字的總和
return num == 0 ? 0 : num % 2 + sumOfDigits(num / 2);
return num == 0 ? 0 : num % 8 + sumOfDigits(num / 8);
那是Java三元運算符,但是在大多數情況下,由於if-else語句更具可讀性,因此不使用它,它也可以執行三元運算符可以執行的相同功能。 但是,如果您想使代碼行更短,那么這是首選。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.