Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/28: Рейтинг темы: голосов - 28, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 21.11.2020
Сообщений: 3

Вычислить количество элементов списка с использованием рекурсивной функции

21.11.2020, 20:14. Показов 6640. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пожалуйста, помогите решить задачку, не могу придумать, как тут может быть использована рекурсия))
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.11.2020, 20:14
Ответы с готовыми решениями:

Вычислить сумму элементов списка с использованием рекурсивной функции
def rec_linear_sum(arr): if len(arr) == 0: return 0 else: Помогите дописать функцию, используя рекурсию, начало есть а дальше...

Вычислить с использованием рекурсивной функции произведение элементов
Привествую, друзья. Помогите пожалуйста дойти до решения этой программы. Успешно сделать это не выходит. Вот ее суть: Вычислить с...

Дано натуральное число N. С использованием рекурсивной функции вычислить количество его цифр
Разработать алгоритм и программу, содержащую рекурсивную подпрограмму Дано натуральное число N. С использованием рекурсивной функции...

14
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38201 / 21133 / 4310
Регистрация: 12.02.2012
Сообщений: 34,740
Записей в блоге: 14
21.11.2020, 20:31
Лучший ответ Сообщение было отмечено polinazarkov как решение

Решение

Python
1
2
3
4
5
def size_list(a):
     if a==[]:
         return 0
     else:
         return 1+size_list(a[1:])
2
Эксперт Python
 Аватар для unfindable_404
693 / 471 / 204
Регистрация: 22.03.2020
Сообщений: 1,051
21.11.2020, 20:31
Лучший ответ Сообщение было отмечено polinazarkov как решение

Решение

Python
1
2
3
4
def foo(lst):
    if not lst:
        return 0
    return 1 + foo(lst[1:])
2
37 / 31 / 13
Регистрация: 08.12.2012
Сообщений: 815
26.01.2025, 05:01
Цитата Сообщение от Catstail Посмотреть сообщение
return 1+size_list(a[1:])
не пойму как эта сумма работает, там же в стек все время попадает
единица , которая плюсуется с чем.. вот тут для меня загадка, потому что
в вызове функции, идет постоянное сокращение списка на 1 элемент , пока
список не опустеет, а к чему тогда плюсуется единица и как этому помогает
список в функции
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38201 / 21133 / 4310
Регистрация: 12.02.2012
Сообщений: 34,740
Записей в блоге: 14
26.01.2025, 08:51
Цитата Сообщение от ujif Посмотреть сообщение
там же в стек все время попадает единица , которая плюсуется с чем..
- при чем тут стек? Возвращается единица плюс результат вызова на укороченном списке.

Цепочка возвратов будет такая:

size_list([11,22,33]) -> 1+ size_list([22,33]) -> 1+1+size_list([33]) -> 1+1+1+size_list([]) -> 1+1+1+0 = 3
2
Любознательный
 Аватар для YuS_2
7406 / 2259 / 360
Регистрация: 10.03.2016
Сообщений: 5,216
26.01.2025, 11:20
Цитата Сообщение от ujif Посмотреть сообщение
как эта сумма работает, там же в стек все время попадает
единица , которая плюсуется с чем..
с тем, что возвращает функция... из стека
А возвращает она сумму, формирующуюся на каждом шаге вызова, примерно так:
Допустим, у нас список из четырех элементов ['a','b','c','d'], тогда в стеке будут сформированы четыре ящичка-функции. Формирование этих ящичков-функций происходит до тех пор, пока длина списка, посредством срезов (на каждом шаге она уменьшается), не станет равна нулю:
1 + fun(a[1:])
1 + fun(a[1:])
1 + fun(a[1:])
1 + fun(a[1:])
здесь следует возврат 0, т.к. список закончился и сработал условный блок. Далее следует разбор стека (по принципу LIFO) в обратном порядке (ибо в каждое место вызова следует возвращаться, но уже с конкретным результатом):
return 1 + 0
return 1 + 1
return 1 + 2
return 1 + 3
- и вот тут происходит возврат в место первичного вызова функции, со значением той самой суммы которую хотели получить.

Добавлено через 44 секунды
Цитата Сообщение от Catstail Посмотреть сообщение
- при чем тут стек?
Человек хочет понять, как устроена рекурсия в питон

Цитата Сообщение от Catstail Посмотреть сообщение
Цепочка возвратов будет такая
не очень наглядно... когда впервые столкнулся с подобным объяснением, долго не втыкал: "а чего здесь происходит-то?"
Нагляднее показать через рекурсивную функцию факториала:
Python
1
2
3
4
5
def fact(n):
    if n == 1:
        return 1
    else:
        return n * fact(n-1)
а далее происходит вызов без вычислений, пока не вернется последний вызов с конкретным числом, например, func(4) с номерами вызовов функции:
1. func(4)
2. 4 * func(3)
3. 4 * 3 * func(2)
4. 4 * 3 * 2 * func(1)
- и теперь пошли возвраты, но теперь уже с вычислениями:
4. 4 * 3 * 2 * 1
3. 4 * 3 * 2
2. 4 * 6
1. 24
- получен результат.
1
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38201 / 21133 / 4310
Регистрация: 12.02.2012
Сообщений: 34,740
Записей в блоге: 14
26.01.2025, 13:24
Цитата Сообщение от YuS_2 Посмотреть сообщение
Нагляднее показать через рекурсивную функцию факториала:
- то же самое...
1
37 / 31 / 13
Регистрация: 08.12.2012
Сообщений: 815
26.01.2025, 15:24
Цитата Сообщение от YuS_2 Посмотреть сообщение
получен результат
правильно ли я понимаю, что когда считаем единицы,
они ведь не привязаны ни к какой переменной в функции
например в этом коде
Python
1
2
3
4
def foo(lst):
    if not lst:
        return 0
    return 1 + foo(lst[1:])
и тогда единицы друг с другом складываются
но если вместо единицы, например подставить
переменную из списка lst из следующего кода
Python
1
2
3
4
def foo(lst):
    if not lst:
        return 0
    return x[0] + foo(lst[1:])
то она уже напрямую имеет отношение к списку и
будет считаться сумма, а в случае с факториалом - произведение
всех чисел
0
 Аватар для Semen-Semenich
5237 / 3481 / 1176
Регистрация: 21.03.2016
Сообщений: 8,310
26.01.2025, 15:36
Цитата Сообщение от ujif Посмотреть сообщение
то она уже напрямую имеет отношение к списку
кто она? переменная х? она вообще ни к чему не имеет отношения так как не объявлена а так будет считаться сумма
Python
1
2
3
4
def foo(lst):
    if not lst:
        return 0
    return lst[0] + foo(lst[1:])
2
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38201 / 21133 / 4310
Регистрация: 12.02.2012
Сообщений: 34,740
Записей в блоге: 14
26.01.2025, 17:32
ujif, посмотри прилагаемую презентацию:
Вложения
Тип файла: zip РЕКУРСИЯ.zip (224.6 Кб, 12 просмотров)
2
Любознательный
 Аватар для YuS_2
7406 / 2259 / 360
Регистрация: 10.03.2016
Сообщений: 5,216
26.01.2025, 19:08
Цитата Сообщение от Catstail Посмотреть сообщение
- то же самое...
это да, для тех кто понимает уже как работает алгоритм. Но для неподготовленного новичка, проще понять, имхо...

Цитата Сообщение от Catstail Посмотреть сообщение
посмотри прилагаемую презентацию
эдак, мозги могут съехать, там же не питон... запутается страждущий знаний.

Цитата Сообщение от ujif Посмотреть сообщение
и тогда единицы друг с другом складываются
главное - запомнить, что никакого сложения не производится, пока все вызовы функции не получат числовые значения, то бишь, вычисление будет производиться только после конечного вызова функции с получением числового значения, но уже без нового вызова самой функции. Само вычисление будет производится в обратном порядке от произведенных ранее рекурсивных вызовов.

Цитата Сообщение от ujif Посмотреть сообщение
но если вместо единицы, например подставить
переменную из списка lst
это уже детали, которые не имеют значения для рекурсии. Если там будут числовые значения, то они и будут использоваться.

Добавлено через 7 минут
ujif, да, я там объясняя, чуток ошибся. Вызовы функции:
Цитата Сообщение от YuS_2 Посмотреть сообщение
func(4)
должны быть такими в пояснениях: fact(4)
1
37 / 31 / 13
Регистрация: 08.12.2012
Сообщений: 815
26.01.2025, 19:51
Цитата Сообщение от Semen-Semenich Посмотреть сообщение
а так будет считаться сумма
да, ошибся, вместо lst[0] написал x[0]
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38201 / 21133 / 4310
Регистрация: 12.02.2012
Сообщений: 34,740
Записей в блоге: 14
27.01.2025, 07:36
Цитата Сообщение от YuS_2 Посмотреть сообщение
там же не питон...
- реализация рекурсии от языка не зависит
0
Любознательный
 Аватар для YuS_2
7406 / 2259 / 360
Регистрация: 10.03.2016
Сообщений: 5,216
27.01.2025, 10:24
Цитата Сообщение от Catstail Посмотреть сообщение
реализация рекурсии от языка не зависит
Да-да... это понятно...
Только вот, чтобы понять, что такое רקורסיה , необходимо сначала прочитать буквы, как минимум
0
37 / 31 / 13
Регистрация: 08.12.2012
Сообщений: 815
27.01.2025, 13:50
Цитата Сообщение от YuS_2 Посмотреть сообщение
буквы, как минимум
еще и знать, с какой стороны начинать читать )
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.01.2025, 13:50
Помогаю со студенческими работами здесь

Вычислить с использованием рекурсивной функции факториал
Вычислить с использованием рекурсивной функции факториала S = 1! + 4! + 7! +… + n! (число n вводится с клавиатуры).

С использованием рекурсивной функции вычислить сумму
Помогите плиз)) Нужно составить программу с использованием рекурсивной функции вычислить сумму: S=1!+2!+...+n! и составить...

Вычислить значение функции, разложив f(x) в ряд Тейлора. Разработать с использованием рекурсивной функции и без
Здравствуйте, помогите решить задание на рекурсию... Согласно варианту задания , вычислить значение функции в, разложив функцию f (x) в...

Разработать программу согласно алгоритму с использованием рекурсивной функции и без использования рекурсивной
Разработать программу согласно алгоритму с использованием рекурсивной функции и без использования рекурсивной функции. n sinl ...

Произведение элементов одномерного массива с использованием рекурсивной функции
Пожалуйста помогите решите задачу: Произведение элементов одномерного массива с помощью рекурсивной функции.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Контроль корректности заполнения дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru