我要实现如下功能,比如一个数字是199。第一步199--1+9+9=19 第二步 19--1+9=10 第三步 10--1+0=1
直到结果是个位数为止。
当然不用方法我做出来了。但是用了方法却碰到问题了,以下是我的代码public class Test {
public static int calculate(int num)
{
int sum=0;
while(num!=0)
{
sum+=num%10;
num/=10;
}
if(sum>=10)
{
num=sum;
calculate(sum);
}
return sum;
}
public static void main(String[] args) {
int rlt=calculate(199);
System.out.println(rlt);
}
}我调试了下,进入三次递归是没有问题的,sum=1了。但是当return sum的时候,他居然又会跳到calculate(sum);这是为什么啊
然后居然把数字都改回来了。百思不得其解。求教各位
1.为什么会出现这种情况,其原理是?
2.应该怎么改才正确啊?
直到结果是个位数为止。
当然不用方法我做出来了。但是用了方法却碰到问题了,以下是我的代码public class Test {
public static int calculate(int num)
{
int sum=0;
while(num!=0)
{
sum+=num%10;
num/=10;
}
if(sum>=10)
{
num=sum;
calculate(sum);
}
return sum;
}
public static void main(String[] args) {
int rlt=calculate(199);
System.out.println(rlt);
}
}我调试了下,进入三次递归是没有问题的,sum=1了。但是当return sum的时候,他居然又会跳到calculate(sum);这是为什么啊
然后居然把数字都改回来了。百思不得其解。求教各位
1.为什么会出现这种情况,其原理是?
2.应该怎么改才正确啊?
{
sum+=num%10;
num/=10;
}It's not so good!
calculate(sum); 改为return calculate(sum);
public static int calculate(int num) {
int sum = 0;
while (num != 0) {
sum = num % 10;
num /= 10;
}
if (sum >= 10) {
num = sum;
calculate(num);
}
return sum;
} public static void main(String[] args) {
int rlt = calculate(199);
System.out.println(rlt);
}
public static int calculate(int num)
{
int sum=0;
while(num!=0)
{
sum+=num%10;
num/=10;
}
if(sum>=10)
{
num=sum;
return calculate(sum);
}
return sum;
}
public static void main(String[] args) {
int rlt=calculate(199);
System.out.println(rlt);
}
但是我更想知道的是
当return sum的时候,他居然又会跳到calculate(sum);
这是为什么
calculate(sum); //调用这个方法,并且不返回。
public class Test {
public static int calculate(int num) {
int sum = 0;
while (num != 0) {
sum += num % 10;
num /= 10;
}
if (sum >= 10) {
num = sum;
return calculate(num);
} else {
return sum;
}
}
public static void main(String[] args) {
int rlt = calculate(1253);
System.out.println(rlt);
}
}
要加上return 和判断语句。
if (sum >= 10) {
num = sum;
return calculate(num);
}
执行到这里的时候回调自身,但是你下面还有一个
return sum;
所以加上if else是正确的,写递归首先就要写好跳出递归的条件
public class Test {
public static int calculate(int num)
{
int sum=0;
while(num!=0)
{
sum+=num%10;
num/=10;
}
if(sum>=10)
{
num=sum;
sum = calculate(sum);
}
return sum;
}
public static void main(String[] args) {
int rlt=calculate(199);
System.out.println(rlt);
}
}这样就对了!!
{
int sum=0;
while(num!=0)
{
sum+=num%10;
num/=10;
}
if(sum>=10)
{//当sum的值不只含有各位数的时候,进行递归调用,其递归返回值就是calculate方法的返回值。
return calculate(sum);
}
return sum; //当sum只有各位数的时候,进行递归返回。
}
public static void main(String[] args) {
int rlt=calculate(199);
System.out.println(rlt);
}楼主在debug的时候,可能会看到,多次的同名函数的调用,以及同名函数的返回。
所以,在调试递归函数调用的时候,一定要抓住,什么时候进行的递归返回。
该实例当中,return sum;这个语句就是递归返回的语句,当程序执行到这条语句的时候,整个函数进行递归返回。
由于递归调用的语句,return calculate(sum);它会将调用的结果返回给上一层的调用,
那么,最终的返回值,就应该是递归返回语句return sum;的值了。