递归方法返回星号中的值

时间:2014-02-04 05:09:11

标签: java recursion methods return

我正在尝试创建一个返回值的递归方法,并在main方法中打印该值。我很困惑如何在main()中返回并打印一行X星号(** ..) X是命令行上的整数 例如,命令行参数是5.
它应该输出到:*****

到目前为止我的代码:

public static void main(String[] commandlineArguments){
      if(commandlineArguments.length == 0){
         System.out.println("Please enter a least one commandline!");
      }
      else{
         Integer number = new Integer(0); //initialize number
         try{
            Integer x = Integer.parseInt(commandlineArguments[0]);
         }
         catch(NumberFormatException exception){ //NumberFormatException
            System.out.println(exception+" is not a integer!");
            System.exit(1); //end program
         }
         Integer num1 = recursiveMethods.asterisks(number); //A (return address)
         System.out.println(num1);
      }
   }

   public static Integer asterisks(Integer number){
      String asterisks1 = "*";

      for(int i = 0; i < number; i++){
         return i;
      }
      return number;

   }
}

5 个答案:

答案 0 :(得分:3)

递归方法有两个特征:

  1. 它呼吁自己提供解决方案
  2. 它有一个基本案例,其中包含递归调用必须停止的位置。
  3. 您的asterisks方法无法满足这些要求。由于这看起来像家庭作业,我只会提供有关该方法应该如何的解释,实施将是你的:

    1. 由于您的方法需要返回星号,因此最好返回String而不是Integer。此String将包含所需的所有*
    2. 定义基本案例。这可以是number的值为1的地方。
    3. 如果number大于1,那么您应该返回一个星号,并使用剩下的星号调用asterisks方法,结果需要整个结果。

答案 1 :(得分:0)

问题在于:

  for(int i = 0; i < number; i++){
     return i;
  }

这个循环只运行一次,它会立即返回i = 0.你不希望这样。在每次迭代时将它附加到asterisks1变量,然后在循环结束后,将asterisks1返回给调用者并打印出来。

另外,仅仅是FYI,这种方法不是递归的。根据定义,递归方法在某些时候调用自己。

答案 2 :(得分:0)

要递归地执行它,你必须自己调用它自己。例如:

public static void main(String[] commandlineArguments){
      if(commandlineArguments.length == 0){
         System.out.println("Please enter a least one commandline!");
      }
      else{
         Integer number = new Integer(0); //initialize number
         try{
            Integer x = Integer.parseInt(commandlineArguments[0]);
         }
         catch(NumberFormatException exception){ //NumberFormatException
            System.out.println(exception+" is not a integer!");
            System.exit(1); //end program
         }
         recursiveMethods.asterisks(number); //A (return address)             
      }
   }
   public static void asterisks(Integer number) {
      if(number == 0)
          return;
      else {
          System.out.print("*");
          asterisks(number - 1);
      }
   }
}

答案 3 :(得分:0)

您可能希望以递归方式调用星号函数,并返回构建的星号字符串,如下所示:

public static void main(String[] commandlineArguments) {
    if (commandlineArguments.length == 0) {
        System.out.println("Please enter a least one commandline!");
    } else {
        Integer number = new Integer(0); // initialize number
        try {
            number = Integer.parseInt(commandlineArguments[0]);
        } catch (NumberFormatException exception) { // NumberFormatException
            System.out.println(exception + " is not a integer!");
            System.exit(1); // end program
        }
        String asterisk = asterisks(number); // A (return address)
        System.out.println(asterisk);
    }
}

public static String asterisks(Integer number) {
    if (number == 0) {
        return "";
    } else {
        return "*" + asterisks(number - 1);
    }
}

答案 4 :(得分:0)

可以完成,

public static String asterisks(int n){
    return (n==1)?"*":asterisks(n-1)+"*";
}

注意:返回Type是String

编辑:对于n <= 0,它不会打印任何内容

public static String asterisks(int n){
    return (n<=0)?"":asterisks(n-1)+"*";
}