На основе рекурсии с использованием Java
public void length() {
System.out.println(length(head, 0));
}
public int length(Node he, int count) {
if(he!=null) {
// System.out.println(he.data +" "+count++);
// count++;
// return length(he.next, count);
return length(he.next, count++);
}
return count;
}
В приведенном выше коде я должен найти длину связанного списка. Если я запускаю тот же код, я получаю длину 0. Но когда я использую закомментированный код, и я получаю правильную длину. Почему это происходит?
2 ответа
length(he.next, count++)
передает первоначальное значение count
к вызову метода, так как вы используете оператор постинкрементного. Поэтому вы всегда проходите 0.
length(he.next, ++count)
будет работать, так как здесь увеличенное значение count
будет пройдено.
В комментируемом коде вы не передаете значение count++
к вызову метода, вы передаете count
после того, как он был уже увеличен, что тоже работает.
Использование
return length(he.next, ++count);
или же
System.out.println(he.data +" "+count);
count++;
return length(he.next, count);
Я постараюсь смоделировать ваш и мой код.
Ваш код:
//count = 0
length(he.next, count++) // length(he.next, 0)
//after recursion call count increments , count = 1
Мой код:
//count = 0
// before recursion call, ++count increments count
// count = 1
length(he.next, ++count) // length(he.next, 1)
Ребята, я новичок здесь, если я не прав, пожалуйста, отредактируйте меня:)