有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java递归打印数,仅含1个参数

我想打印如下内容:

5
54
543
5432
54321

我做了一个程序,但它不是递归递减的:

    public static void main(String[] args){

        func(5);
    }
    public static String func(int num){

        String temp = "";
        if(num == 0){
           return "";
        }
        temp = temp + num;
        System.out.println(temp);

        return temp + func(num-1);
}

我上面的程序打印如下:

5
4
3
2
1

问题:我可以只递归使用1个参数(num)吗?因为我可以通过使用“”和num作为参数来制作一个工作程序。我只想要一个。我也在避免递归方法中的for循环。可能吗? 我已经想了好几天的解决办法,但似乎想不起来


共 (6) 个答案

  1. # 1 楼答案

    您可以使用公共的单参数1和私有的双参数1

    private static String func(int num, String soFar) {
        if (num == 0) {
            return soFar;
        }
        soFar += num;
        System.out.println(soFar);
    
        return func(num - 1, soFar);
    }
    
    public static String func(int num) {
        return func(num, "");
    }
    
    func(5);
    5
    54
    543
    5432
    54321
    
  2. # 2 楼答案

    您需要跟踪递归函数之外的String temp(因为您不想传递它)

    你可以这样做:

    class Main {
      private static String temp = "";
      public static String func(int num){
        if(num == 0){
          return "";
        }
        temp = temp + num;
        System.out.println(temp);
    
        return temp + func(num-1);
      }
    
      public static void main(String[] args) {
        func(5);
      }
    }
    

    或者像这样:

    class Main {
      public static void main(String[] args) {
        Func func = new Func();
        func.apply(5);
      }
    }
    
    class Func {
      String temp = "";
    
      public String apply(int num) {
        if (num == 0){
          return "";
        }
        temp = temp + num;
        System.out.println(temp);
    
        return temp + apply(num-1);
      }
    }
    
  3. # 3 楼答案

    你确定不想使用两个参数吗?因为这样的事情是可能的

    String function1(int num, int max)
    {
      if(num=0)
        return;
      for(i=max; i=num; i--)
      {
       System.out.print(i);
      }
      System.out.print('\n')
      function1(num-1, max);
    }
    

    只有一个参数的另一个想法是:

    String function2(int num){
        int dig = num % 10;     // Get last digit from param
        last dig --;            // new last Digit
        if (dig !=0)
        {
            num = num * 10 + dig; //Add dig to the right side.
            System.out.println(num);
            return function2(num);
        }else
        {
            return "";
        }
    } 
    

    但是这个函数只适用于小于10的整数。因此,我建议使用带有两个参数的函数,例如上面的一个

    如果你已经有了一个只有一个参数的程序,那就使用包装器函数

    String function(int num)
    {
      return function1(num, num);
    }
    
  4. # 4 楼答案

    每次通话时,您都会将temp初始化为空

    public static String func(int num, String temp){
    
        if(num == 0){
            return "";
        }
        temp = temp + num;
        System.out.println(temp);
    
        return temp + func(num-1, temp);
    }
    
    public static void main(String... d) {
        func(5, "");
    
  5. # 5 楼答案

    把绳子传过去就行了

    public static void main(String[] args){
        func("", 5);
    }
    public static String func(String tmp, int num){
        if(num > 0) {
            String res = tmp + num;
            System.out.println(res);
            return func(res, num - 1);
        } else  {
            return tmp;
        }
    }
    
  6. # 6 楼答案

    单参数版本(已更新):

    public static void main(String[] args){
        func(5);
    }
    
    public static String func(int num){
        String numStr = num + "";
        int lastDigit = Integer.valueOf(numStr.substring(numStr.length() - 1)).intValue();
        if (lastDigit == 0){
           return numStr.substring(0, numStr.length()-1);;
        }
        System.out.println(numStr);
        int newNum = num * 10 + lastDigit - 1;
        return func(newNum);
    } 
    

    它执行您描述的操作,并以字符串形式返回最后一个值