Числовой шаблон с использованием рекурсии

#java #recursion

#java #рекурсия

Вопрос:

У меня возникли небольшие проблемы с рекурсией, моим первым вводом будет начальное число, и оно будет продолжать вычитаться вторым вводом. Пример) 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);
    }
  

Ответ №1:

Вы можете выполнять действия после рекурсивного вызова, повторно используя n1 без каких-либо вычислений:

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

(Я печатаю на телефоне, поэтому я немного сократил имена)

Ответ №2:

Для каждого вашего «запуска» printNumPattern , все переменные уникальны только для этого одного запуска. Это относится к int temp , а также к int num1, int num2 (вашим параметрам).

Итак, в строке 2 вы говорите int temp = num1; . Если num1 равно 0 или ниже, вы затем выполняете if (num1 == temp) , что всегда будет верно. else (Который идет к printNumPattern(num1 num2,num2); , возможно, никогда не будет выполнен.

Похоже, вы хотите temp быть исходным вводом. Если вы этого хотите, продолжайте передавать его в своем printNumPattern методе в качестве третьего параметра.

Ответ №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 и notepad . Если это zybooks, программа хочет вывод без разрывов строк, поэтому нет ln или f (» n»)