2014-11-17 2 views
0
Public class ListItem{ 

    final int number; 
    ListItem next; 


ListItem(int number, ListItem next) { 
     this.number = number; 
     this.next = next; 
    } 

public int length() { 
     if(this.next != null){ 
      this.next = this.next.next; 
      return 1 + this.length(); 
     } 
     else return 0; 
    } 

Когда я пытался рассчитать длину, я получил длину на 1 ниже ожидаемой длины. Например, если длина равна 10, я бы получил 9. Как я могу исправить эту проблему?Как я могу рекурсивно вычислить количество элементов в списке?

Спасибо.

ответ

1

Ваше последнее значение возвращает 0, потому что this.next равно null. Таким образом, вы добавляете все, кроме последнего элемента, поэтому вы возвращаете длину -1. Я пришел с фона Ruby и не программировал Java через 10 лет, но это будет больше похоже на ниже, синтаксис может быть отключен.

Кроме того, как правило, для рекурсивного материала ваш базовый регистр для возврата будет первой линией функции.

Public class ListItem{ 
    final int number; 
    ListItem next; 


ListItem(int number, ListItem next) { 
    this.number = number; 
    this.next = next; 
} 

public int length() { 
    if(this.next == null){ 
     return 1; 
    } 
    else { 
     return 1 + this.next.length; 
    } 
} 
Смежные вопросы