Основная проблема с вашим кодом заключается в следующей строке:
return determine_sum(m_list[i], sum_count)
Если вы сталкиваетесь с другим списком, вы вызываете determine_sum
рекурсивно, который вычисляет сумму подсписка и начинается с подсчета sum_count
. Однако, каким бы ни был результат для первого подсписка, это общий результат, который вы возвращаете. Ваша функция игнорирует любые следующие списки, потому что return
завершает функцию.
Такая рекурсивная функция не должна передавать sum_count
. Вместо этого вы можете просто рекурсивно вычислить сумму подсписка, а затем добавить результат к текущей сумме, продолжая l oop. Каждый вызов determine_sum
получит свою собственную копию текущей суммы, поэтому вам не нужно ее передавать.
Примерно так:
def determine_sum(m_list):
sum_count = 0
for i in range(len(m_list)):
if isinstance(m_list[i], int):
sum_count += m_list[i]
else:
sum_count += determine_sum(m_list[i])
return sum_count
m_list = [1, 2, 3, [4, 5], [4, [3,4]] ]
print(determine_sum(m_list))
Итак, вы не были удаленно.
Примечание: некоторые другие предлагаемые решения сохраняют параметр sum_count
и изменяют строку проблемной c на:
sum_count = determine_sum(m_list[i], sum_count)
Это также работает, но рекомендуется только если вы пишете функцию, предназначенную для добавления рекурсивной суммы списков к существующему числу. Учитывая название вашей функции, не похоже, что это действительно ваша цель.