Рекурсия, вызов функции без параметров

Задача найти второй максимум.

вот сама задача

Ссылка на источник: https://habr.com/ru/post/275813/

Меня интересует реализация на Python. Условие задачи в том, что нельзя передавать параметры в функцию, в этом то и проблема, ведь задача заточена на рекурсию. Возможно ли так сделать? На сайте приведено решение на Java, я не разбираюсь в Java, но там они передают параметры в функцию.

Сам код на Java:

public class Solution {
    public static void recursion(int max1, int max2) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        // Базовый случай
        if (n > 0) {
            // Шаг рекурсии / рекурсивное условие
            if (max1 < n) {
                recursion(n, max1);
            } // Шаг рекурсии / рекурсивное условие
            else if (max2 < n) {
                recursion(max1, n);
            } // Шаг рекурсии / рекурсивное условие
            else {
                recursion(max1, max2);
            }
        } else {
            System.out.println(max2);
        }
    }
    public static void main(String[] args) {
        recursion(0, 0); // вызов рекурсивной функции
    }
}

Ещё, я не очень понимаю, как должен выглядеть ввод последовательности.


Ответы (1 шт):

Автор решения: eri

Функция без параметров для одного максимума:

>>> def remax():
...     n = int(input())
...     if n == 0:
...         return 0
...     return max(n, remax())
... 
>>> remax()
4
6
2
4
0
6
>>> _
6
>>> 

Для двух максимумов получается такая

>>> def remax():
...     f = int(input())
...     if f == 0:
...         return 0,0
...     mm, sm = remax()
...     l = [f,mm,sm]
...     mm = max(*l)
...     l.remove(mm)
...     sm = max(*l)
...     return mm, sm
... 
>>> remax()
1
2
3
4
3
0
(4, 3)

Если вызвать как remax()[1] - получишь второй максимум

→ Ссылка