На основе рекурсии с использованием 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) 

Ребята, я новичок здесь, если я не прав, пожалуйста, отредактируйте меня:)

Другие вопросы по тегам