Короче говоря, вы находите "скользящее среднее" из списка чисел.
Здесь было бы полезно использовать рекурсию. Вернуть единственный элемент, когда "len (lst) == 1" в противном случае, вычислить скользящее среднее и рекурсировать.
В этом задании есть две части. Во-первых, вам нужно преобразовать списки типа [-1, 4, 8, 1] в списки типа [1.5, 3.66, 3] (найти скользящие средние). Во-вторых, вам нужно повторить этот процесс с результатами скользящих средних, пока длина вашего списка не станет 2 (или 1).
Вы можете решить первую проблему (найти скользящие средние значения) независимо от второй. Найти скользящее среднее очень просто, вы сначала отслеживаете промежуточную сумму (например, если список равен [-1, 4, 8, 1], промежуточная сумма равна [-1, 3, 11, 12]) и делите каждый элемент по их соответствующему рабочему индексу (т.е. просто [1, 2, 3, 4]), чтобы получить [-1/1, 3/2, 11/3, 12/4] = [-1, 1,5, 3,66, 3] , Затем вы можете отказаться от первого элемента, чтобы получить [1.5, 3.66, 3].
Вторая проблема может быть легко решена с помощью рекурсии. Рекурсия - это просто еще одна форма зацикливания, весь рекурсивный код может быть преобразован в обычный код for / while-loop, а весь код зацикливания может быть преобразован в рекурсивный код. Однако некоторые проблемы имеют тенденцию к более «естественному» решению либо в рекурсии, либо в цикле. На мой взгляд, вторая проблема (повторение процесса взятия средних значений) более естественно решается с помощью рекурсии. Предположим, что вы решили первую проблему (нахождения скользящего среднего), и у нас есть функция runavg (lst), чтобы решить первую проблему. Мы хотим написать функцию, которая многократно находит скользящее среднее lst, или возвращает среднее значение, когда длина lst равна 2.