Предпоследние матчи - PullRequest
       21

Предпоследние матчи

0 голосов
/ 01 февраля 2020
def penultimate(l:List[Int]):Int = l match{
    case x::y::Nil => x
    case x::tail => penultimate(tail)
    case _ => ???
}

Предпоследним является элемент, который предшествует последнему элементу в списке.

В первом случае у нас есть список из 2 элементов. Какой базовый случай?

Во втором случае мы будем рекурсивно вызывать тот же метод в конце списка. И количество элементов в списке будет уменьшаться на один для каждого рекурсивного вызова.

Какой именно последний случай? Когда случится третий случай?

Ответы [ 2 ]

1 голос
/ 01 февраля 2020

Последний случай произойдет, если в начальном списке менее 2 элементов.

0 голосов
/ 03 февраля 2020

Итак, как вы сами объяснили, если в списке два элемента, первый случай совпадает.

В противном случае, если есть один или несколько, это второй случай?

Что осталось? Последний случай соответствует пустым спискам. Если нет первого элемента, который нужно отрубить, он пройдет через второй случай и попадет в последний. Вы можете оставить ??? там или выбросить другое исключение, если хотите. Или просто сделай l.head (он тебя бросит).

Я полагаю, вы просто пишете эту функцию для упражнения, но просто подумали, что я все равно упомяну об этом: то, что вы делаете, эквивалентно l.init.last

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