繁体   English   中英

递归方法返回值以星号表示

[英]Recursive method return values in asterisks

我试图创建一个返回值的递归方法,并在我的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;

   }
}

递归方法具有两个特征:

  1. 它要求自己提供解决方案
  2. 它具有一个基本案例,其中包含递归调用必须停止的位置。

您的asterisks方法不满足所有这些要求。 由于这看起来像是家庭作业,因此我仅提供有关此方法应如何的解释,实现将由您执行:

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

问题在这里:

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

此循环仅运行一次,它将立即返回i =0。您不希望那样。 使它在每次迭代时都在您的asterisks1变量后附加一个*,然后在循环完成后,将asterisks1返回给调用者并进行打印。

同样,仅是仅供参考,此方法也不是递归的。 根据定义,递归方法在某个时候会自行调用。

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

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

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

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

可以做为

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

注意:返回类型为字符串

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM