【问题标题】:Number pattern using recursion使用递归的数字模式
【发布时间】:2021-11-11 09:29:22
【问题描述】:

我在递归方面遇到了一些麻烦,我的第一个输入将是起始数字,它会一直被第二个输入减去。 Ex) 12 和 3 作为输入,输出为 12 9 6 3 0 3 6 9 12。printNumPattern 方法是递归方法。

private static void printNumPattern(int num1, int num2) {
        int temp = num1;

        System.out.println(num1);

        if(num1 <= 0) {
            
            if(num1 == temp) {
                System.out.println();
            }else {
                printNumPattern(num1+num2,num2);
            }
            
        }else {
            printNumPattern(num1-num2,num2);
        }

    }


    public static void main(String[] args) { 
        Scanner scnr = new Scanner(System.in);
        int num1;
        int num2;

        num1 = scnr.nextInt();
        num2 = scnr.nextInt();
        printNumPattern(num1, num2);
    }

【问题讨论】:

    标签: java recursion


    【解决方案1】:

    对于您的printNumPattern 的每一次“运行”,所有变量对于那一次运行都是唯一的。这适用于int temp,也适用于int num1, int num2(您的参数)。

    所以,在第 2 行你说int temp = num1;。如果 num1 为 0 或更低,那么您将执行 if (num1 == temp),这将始终为真。 else(去printNumPattern(num1+num2,num2); 不可能永远执行。

    听起来您希望 temp 成为原始输入。如果需要,请继续在您的 printNumPattern 方法中将其作为第三个参数传递。

    【讨论】:

      【解决方案2】:

      你可以在递归调用之后做事,重用n1而不需要任何计算:

      static void p(int n1,int n2){
        System.out.println(n1);
        if(n1<=0)return;
        p(n1-n2,n2);
        System.out.println(n1);
      }
      

      (我在手机上打字,所以我把名字缩短了一点)

      【讨论】:

        【解决方案3】:

        某些程序可能会出现代码问题。作者最接近。

            int baseVal = num1;
             System.out.print(num1 + " ");
                if(num1 <= 0)
                {
                   if (num1 == baseVal)
                       return;
                 }
                   else
                 {
                   printNumPattern(num1 + num2, num2);
                 }
                }
                else
                {
                 printNumPattern(num1 - num2, num2);
                 System.out.print(num1 + " ");
                 }
        

        这适用于我使用的任何程序。 zybooks、VS 和记事本++。如果它的 zybooks,程序想要一个没有换行符的输出,所以这就是为什么没有 ln 或 f("\n")

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2023-01-20
          • 2011-03-19
          • 1970-01-01
          • 2022-01-01
          • 2014-09-19
          • 2018-02-05
          • 1970-01-01
          相关资源
          最近更新 更多