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

java递归打印数,仅含1个参数,java,recursion,Java,Recursion,我想打印如下内容: 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 ""; } tem

我想打印如下内容:

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循环。可能吗?
我已经想了好几天的解决办法,但似乎想不出这个办法。

把绳子传过去就行了

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

每次调用时,您都将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, "");

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

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);
}
单参数版本(已更新)):


这就是您所描述的,并以字符串形式返回最后一个值。

您需要在递归函数之外跟踪
字符串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);
  }
}
或者像这样:

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);
  }
}

您可以使用公共的单参数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

这也是我的解决方案。所以我认为最好的方法是使用两个参数。我不敢想使用1个参数?呵呵。我想最好的办法是用两个参数。我的大脑只适合初学者。是的,最好的方法是使用两个参数。@user2402896的那一个很不错。如果不想重写otehr程序,请使用包装器。但是我认为修复代码不会花费太多的精力。所以仅仅1个参数是不可能的?