实际上,我的目标是找到超数,例如,我将获得2个值n,k,其中n = 148和k = 3,所以我必须形成p = 148148148,然后加上p的位数,直到我得到一个单数否(ans = 3)这就是我尝试过的.......
import java.util.*;
public class RecurrsiveDigitSum {
public int check(int n) {
int s = 0;
int d;
while(n>0) {
d = n%10;
s = s+d;
n = n/10;
System.out.println(s);
}
if(s/10 !=0){
check(s);
}
return s;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scan = new Scanner(System.in);
int n = scan.nextInt();
int k = scan.nextInt();
int sum;
RecurrsiveDigitSum obj = new RecurrsiveDigitSum();
sum = obj.check(n);
System.out.println(sum);
sum = sum * k;
System.out.println(sum);
int s1 = obj.check(sum);
System.out.println(s1);
}
}
但是这里的问题是,即使我的s = 4最终它只是返回找到的s的第一个值,所以请帮助我朋友
答案 0 :(得分:2)
必须在递归调用之前放回车符。
if(s/10 !=0){
return check(s);
}
如果不放置它,则调用函数的结果将为丢失,并且将返回s的结果而不是check(s)。
我已经稍微改善了您的解决方案。
public int check(int n) {
int s = 0;
while(n>0) {
s += n%10;
n /= 10;
}
if(s/10 != 0){
return check(s);
}
return s;
}