将数字总和递归减少到一位数字

时间:2019-05-26 11:17:32

标签: java recursion methods

如何使用递归使函数返回所有数字的总和,直到变成1位数?我能够制作一个获取所有数字之和的函数,但是似乎找不到找到一种递归求和数字的方法:

class sum_of_digits 
{ 

    static int sum_of_digit(int n) 
    {  
        if (n == 0) 
            return 0; 
        return (n % 10 + sum_of_digit(n / 10)); 
    } 

    public static void main(String args[]) 
    { 
        int num = 12345; 
        int result = sum_of_digit(num); 
        System.out.println("Sum of digits in " +  
                           num + " is " + result); 
    } 
} 

此代码显示'12345'的总和,为15。但是我需要更改它,因此它显示1 + 5的总和,即6。

4 个答案:

答案 0 :(得分:3)

  

您是否认为无需额外操作就能使其正常工作   方法?

为什么我们不能只让递归为我们完成工作,而简单地说:

static int sum_of_digit(int n) 
{  
    if (n < 10) 
        return n;

    return sum_of_digit(n % 10 + sum_of_digit(n / 10)); 
} 

答案 1 :(得分:2)

如果您结合sum_of_digit定义一个额外的递归“层”,事情将变得容易得多。这个新函数可以调用sum_of_digit,直到结果为一位。这是我的意思:

static int sum_to_one_digit(int n) {
    if(n/10 == 0) return n;
    return sum_to_one_digit(sum_of_digit(n));
}

main中的代码为:

public static void main(String args[]) 
{ 
    int num = 12345; 
    int result = sum_to_one_digit(num); 
    System.out.println("Sum of digits in " +  
                   num + " is " + result); 
} 

答案 2 :(得分:2)

您可以在末尾添加一个子句以检查总和是否小于10,如果不是,则使用新计算出的总和再次递归调用它,即。

static int sum_of_digit(int n)
{
    if (n == 0)
        return 0;
    int temp = (n % 10 + sum_of_digit(n / 10));
    if (temp < 10)
        return temp;
    return sum_of_digit(temp);
}

答案 3 :(得分:1)

有几种方法可以做到这一点,如果允许使用全局变量,将是这样的:

public class Sum_of_digits{
        static int sum = 0;

    public static void main(String args[]){

        int n = 12345;
        System.out.println(sum_of_digit(n));
        sum = 0;

    }
    static int sum_of_digit(int n){

        if(n==0){
            if(sum/10 == 0){
                return sum;
            }else{
                n=sum;
                sum=0;
            }
        }
        sum = sum+(n%10);
        n=n/10;
        return sum_of_digit(n);

    }
}

如果不允许全局变量,则将sum作为参数传递将有所帮助:

public class Sum_of_digits{


        public static void main(String args[]){

            int n = 12345;
            int sum = 0;
            System.out.println(sum_of_digit(n,sum));

        }
        static int sum_of_digit(int n,int sum){

            if(n==0){
                if(sum/10 == 0){
                    return sum;
                }else{
                    n=sum;
                    sum=0;
                }
            }
            sum = sum+(n%10);
            n=n/10;
            return sum_of_digit(n,sum);

        }
    }

在这里,我们只是将焦点从 n 转移到 sum 来评估循环/递归终止的条件。