0

我有一个练习,他的任务是在 java 中使用递归找到整数中的最大数字。例如,对于数字 13441,将返回数字“4”。

我已经尝试了一天,但没有任何效果。

我认为可以工作的是以下代码,我无法完全了解以下代码:

public static int maxDigit(int n) {
    int max;
    if (n/100==0) {
        if (n%10>(n/10)%10) {
            max=n%10;
        }
        else
            max=(n/10)%10;
    }
    else if (n%10>n%100)
        max=n%10;
    else
        max=n%100;
    return maxDigit(n/10);
}

如您所见,这是完全错误的。

任何帮助都会很棒。谢谢

4

4 回答 4

7

这是通过递归比较最右边的数字与剩余数字的最高数字(通过将原始数字除以 10 获得的数字)来实现的:

int maxDigit(int n) {
    n = Math.abs(n);   // make sure n is positive
    if (n > 0) {
        int digit = n % 10;
        int max = maxDigit(n / 10);
        return Math.max(digit, max);
    } else {
        return 0;
    } 
}
于 2013-05-09T19:44:21.767 回答
6

最简单的基本情况是,如果 n 为 0,则返回 0。

public static int maxDigit(int n){
    if(n==0)                               // Base case: if n==0, return 0
        return 0;
    return Math.max(n%10, maxDigit(n/10)); // Return max of current digit and 
                                           // maxDigit of the rest 
}

或者,稍微简洁一点;

public static int maxDigit(int n){
    return n==0 ? 0 : Math.max(n%10, maxDigit(n/10));
}
于 2013-05-09T19:50:48.823 回答
1

我不会深入研究你的代码,我认为它比它必须的更复杂。但在我看来,这些案例实际上相当简单(除非我遗漏了什么):

基本情况:参数只有一位,将那一位作为参数返回

一般情况:返回(参数中的第一个数字)和(参数中剩余数字的maxDigit)中的较高者

于 2013-05-09T19:44:01.380 回答
0

你也可以写:

public static int maxDigit(int n, int max){
    if(n!=0)    {
        if(n%10 > max) {
            max = n%10;
        }
        return maxDigit(n/10, max);
    }
    return max;
}
于 2018-05-18T06:59:28.193 回答