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

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

09.02.2019, 13:51. Показов 52865. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Python
1
2
3
4
def rec_linear_sum(arr):
if len(arr) == 0:
return 0
else:
Помогите дописать функцию, используя рекурсию, начало есть а дальше не могу придумать алгоритм
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.02.2019, 13:51
Ответы с готовыми решениями:

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

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

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

13
 Аватар для FFPowerMan
2158 / 1238 / 509
Регистрация: 11.10.2018
Сообщений: 6,282
09.02.2019, 14:47
Python
1
2
3
4
5
6
7
8
9
10
11
12
Massiv = [1, 2, 3, 4, 5]
Summa = 0
 
def DSumma(x):  
    global Summa
    if x == len(Massiv):
        return    
    Summa  += Massiv[x]
    DSumma(x+1)
 
DSumma(0)
print('\nSumma = ', Summa)
0
0 / 0 / 0
Регистрация: 04.05.2019
Сообщений: 1
04.05.2019, 14:20
Python
1
2
3
4
5
def summa(arr):
    if arr==[]:
        return 0
    else:
        return arr.pop(len(arr)-1) + summa(arr)
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38201 / 21133 / 4310
Регистрация: 12.02.2012
Сообщений: 34,740
Записей в блоге: 14
04.05.2019, 14:43
baigarinovaliba, а не лучше ли отщипывать по элементу с начала списка?

Добавлено через 2 минуты
Python
1
2
3
4
5
6
7
def sumList(x):
    if x==[]:
        return 0
    else:
        return x[0]+sumList(x[1:])
 
print(sumList([1,2,3,4]))
0
121 / 100 / 79
Регистрация: 30.11.2017
Сообщений: 230
04.05.2019, 17:32
Catstail, создавать при каждом вызове функции копию массива, уменьшенную на один элемент (срезы в python делают именно это) - на мой взгляд, не самое удачное решение.
baigarinovaliba, тоже не слишком удачное решение, так как функция изменяет исходный массив.
Я бы решил эту задачу так:
Python
1
2
3
4
def sumList(x, i = 0):
    if i >= len(x):
        return 0
    return x[i] + sumList(x,i + 1)
3
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38201 / 21133 / 4310
Регистрация: 12.02.2012
Сообщений: 34,740
Записей в блоге: 14
04.05.2019, 18:39
Starfer, а еще рациональнее, вероятно, вот так:

Python
1
2
3
4
5
6
7
def sumList(x):
    def sumL(x,s,i):
        if i<0:
            return s
        else:
            return sumL(x,s+x[i],i-1)
    return sumL(x,0,len(x)-1)
Здесь длина списка вычисляется всего один раз. И, к тому же, рекурсия хвостовая (уж не знаю, играет ли это роль в Питоне).
0
121 / 100 / 79
Регистрация: 30.11.2017
Сообщений: 230
04.05.2019, 23:46
Catstail, Питон не оптимизирует хвостовую рекурсию. Функция len для стандартных коллекций в Питоне выполняется за постоянное время, так как длина списка не высчитывается каждый раз заново, а хранится в переменной-атрибуте.
0
0 / 0 / 0
Регистрация: 09.03.2023
Сообщений: 16
18.04.2023, 19:28
я хз как доделать, и в чем ошибка, помогите пж
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
def rec_linear_sum(*a):
    if len(a) == 0:
        return 0
    s = 0
    for i in a:
        i = int(*i)
        s += i
    if len(a) == 0:
        return 0
    return s
 
 
print(rec_linear_sum([1, 2]))
0
 Аватар для TimutGin
515 / 339 / 146
Регистрация: 16.02.2021
Сообщений: 626
18.04.2023, 21:22
Python
1
2
3
4
5
6
7
8
9
10
11
def rec_linear_sum(arr,lenght,summ=0,i=0):
    if i != lenght:
        summ+=arr[i]
        i+=1
    else:
        print(summ)
        return 0
    rec_linear_sum(arr,lenght,summ,i)
 
arr = [1,2] 
rec_linear_sum(arr,len(arr))
0
0 / 0 / 0
Регистрация: 09.03.2023
Сообщений: 16
19.04.2023, 08:01
TimutGin, смотри, на вход может приниматься как 0 так и несколько аргументов(даже 100), а у тебя принемает четко 2 числа arr и lenght, чтобы можно было принять неизвнстное кол-во чисел нужно поставить '*' перед аргументом
0
 Аватар для TimutGin
515 / 339 / 146
Регистрация: 16.02.2021
Сообщений: 626
19.04.2023, 08:22
TKiq, в моём коде в список arr можно добавить и 0, и неизвестное количество чисел. Lenght - это длина списка.
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38201 / 21133 / 4310
Регистрация: 12.02.2012
Сообщений: 34,740
Записей в блоге: 14
20.04.2023, 09:28
TimutGin, длина - это "length", а не "lenght".
1
0 / 0 / 0
Регистрация: 09.03.2023
Сообщений: 16
24.04.2023, 14:56
TimutGin, я понимаю как работает твой код, но нужно чтобы на вход шел только список без его длины
0
 Аватар для TimutGin
515 / 339 / 146
Регистрация: 16.02.2021
Сообщений: 626
24.04.2023, 15:29
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
def rec_linear_sum(arr,summ=0,i=0):
    if i != length:
        summ+=arr[i]
        i+=1
    else:
        print(summ)
        return 0
    rec_linear_sum(arr,summ,i)
 
arr = [1,2,6]
length = len(arr)
 
rec_linear_sum(arr)
или если
Цитата Сообщение от TKiq Посмотреть сообщение
чтобы на вход шел только список
Python
1
2
3
4
5
6
7
8
9
10
11
def rec_linear_sum(arr,summ=0,i=0):
    length = len(arr)
    if i != length:
        summ+=arr[i]
        i+=1
    else:
        print(summ)
        return 0
    rec_linear_sum(arr,summ,i)
 
rec_linear_sum([1,2,6])
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.04.2023, 15:29
Помогаю со студенческими работами здесь

С помощью рекурсивной функции вычислить сумму элементов одномерного массива
С помощью рекурсивной функции вычислить сумму элементов одномерного массива. Есть примеры но только на с++ =(

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

Вычислить с использованием рекурсивной процедуры сумму факториалов
вычислить с использованием рекурсивной процедуры сумму факториалов s = 1!+3!+5!+...+n!

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

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


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Архитектура слоя интернета для сервера-слоя.
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
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru