#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»)