如何在Java中以递归fn返回

时间:2018-10-14 06:29:58

标签: java

实际上,我的目标是找到超数,例如,我将获得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的第一个值,所以请帮助我朋友

1 个答案:

答案 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;
 }