Нахождение минимального значения с использованием узлов и нуля - PullRequest
0 голосов
/ 07 октября 2019

было просто интересно, как мне следует интерпретировать этот код?, Что меня больше всего отвлекает, так это часть minOfTail = next.minVal (), и когда мы сравниваем thisNumber с minOfTail, какое именно значение присваивается этой переменнойminOfTail?

    public ListOfNVersion03PartB(int num)
    {
        thisNumber = num;
        next = null;

        ++nodeCount;
        nodeID = nodeCount;

    }
 public int minVal()
    {
        int minOfTail;

        if ( next == null )
            return thisNumber;

        minOfTail = next.minVal();

        if ( thisNumber <= minOfTail )
            return thisNumber; 
        else
            return minOfTail;

    } // method minVal

Ответы [ 2 ]

2 голосов
/ 07 октября 2019

Функция рекурсивно вычисляет минимальное значение thisNumber в связанном списке объектов. Функция minVal() вычисляет минимальное значение среди хвоста списка, который начинается у текущего объекта.

Если поле next текущего объекта равно null, то этот хвост является именно этим объектом, иминимальное значение хвоста, начинающегося у текущего объекта, равно thisNumber.

Если next field is not null`, то минимальное значение хвоста, начинающегося у текущего объекта, составляет минимум

  • значение thisNumber текущего значения и
  • минимальное значение хвоста, начинающегося у следующего объекта.

Чтобы функция сначала находила минимальное значениеtail начинается со следующего объекта и присваивает это значение minOfTail. Затем он возвращает минимальное значение minOfTail и thisNumber текущего объекта.

1 голос
/ 07 октября 2019

было просто интересно, как мне интерпретировать этот код?

Этот вопрос слишком широкий и на него нельзя ответить.

вещь, которая отбрасывает менянаибольшее значение имеет minOfTail = next.minVal () part

На этот вопрос можно ответить.

Таким образом, всю функцию minVal() можно переписать следующим образом:

public int minVal()
{
    if ( next == null )
        return thisNumber;
    return Math.min( thisNumber, next.minVal() );
}

Или даже так:

public int minVal()
{
    return next == null?  thisNumber : Math.min( thisNumber, next.minVal() );
}

Итак, next.minVal() просто вызовет узел next для вычисления собственного минимального значения, а следующий узел делегирует свой следующий узели так далее до тех пор, пока не останется следующий узел.

Обратите внимание, что это:

    int minOfTail;

    ... unrelated code here...

    minOfTail = next.minVal();

- это древний стиль C (стиль C до того, как компиляторы C начали влиять на C ++), этоэто вообще не распространено в Java, это неразумно делать на любом языке, и в наши дни это обычно осуждают.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...