Ответ 1
Каждый раз, когда вы вызываете this.next.nth()
, вы вызываете метод nth()
на совершенно другом объекте. Ваш this
будет ссылаться на этот новый объект (в предыдущем стеке это было next
). Это не чистая рекурсия. Просто подумайте, как будто вы вызываете другой метод на какой-то другой объект.
Итак, когда position=1
this
будет ссылаться на S5
.
UPDATE Допустим, что ваши List_Nodes соединены цепями 10- > 20- > 30- > 40- > 50
Всякий раз, когда вы вызываете node.nth(5)
из основного,
Stack 1: position 5, this points to 10 (you are calling this.next.nth(4); means 20.nth())
Stack 2: position 4, this points to 20 (calling this.next.nth(3); = 30.nth())
Stack 3: position 3, this points to 30 (calling this.next.nth(2) = 40.nth())
Stack 4: position 2, this points to 40 (calling this.next.nth(1) = 50.nth())
Stack 5: position 1, this points to 50 (returning this; this here is 50)
returns 50
returns 50 (not going back into if, so return value remains same)
returns 50
returns 50
returns 50
То же самое изображается на картинке при обсуждении в чате. Добавьте его сюда, чтобы принести пользу будущему читателю.
Другое UPDATE
No assignment variable in else as such
Вы можете написать это как
List_Node temp = this.next.nth(position-1);
return temp;
В общем, нам нужно отделить классы List
и Node
, ваш List
должен иметь head
, а ваш Node
будет иметь указатель item
и next
. Также как LinkedList
в java. Тогда метод nth()
будет в классе List
, и он просто выполняет его повторение до тех пор, пока вы не достигнете элемента nth
.