只有1个参数的java递归打印编号

时间:2015-01-28 12:44:02

标签: 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 "";
        }
        temp = temp + num;
        System.out.println(temp);

        return temp + func(num-1);
}

我的上述程序打印如下:

5
4
3
2
1

问题:我可以递归地仅使用1个参数(num)吗?因为我能够通过使用“”和num作为参数来制作一个有效的程序。我只想要1.我也避免在递归方法中循环。可能吗? 我一直在考虑像某些日子这样的解决方案,似乎无法想到这一点。

6 个答案:

答案 0 :(得分:0)

只需沿着

传递字符串
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;
    }
}

答案 1 :(得分:0)

您正在初始化每次通话时的临时空值

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, "");

答案 2 :(得分:0)

您确定不想使用两个参数吗?因为这样的某些东西是可能的。

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

答案 3 :(得分:0)

一个参数版本(已更新):

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

这就是您所描述的内容,并将最后一个值作为字符串返回。

答案 4 :(得分:0)

你需要跟踪递归函数之外的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);
  }
}

答案 5 :(得分:0)

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

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