如何使用递归使函数返回所有数字的总和,直到变成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。
答案 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 来评估循环/递归终止的条件。