Программирование на питоне - Общение Python мододелов

Вопрос Программирование на питоне

Регистрация
15 Июл 2013
Сообщения
89
Репутация
0
Спасибо
0
Монет
0
def r(g):

----if len(g) != 0:

---------ans = g[0] + r(g[1:])

----return ans

g = [5,6,7,8,9]

r(g)
 
Регистрация
20 Июл 2013
Сообщения
91
Репутация
0
Спасибо
0
Монет
0
Вот Ваша программа: def r(g):
if len(g) != 0:
ans = g[0] + r(g[1:])
return ans
g = [5,6,7,8,9]
r(g) А вот результат её работы: Traceback (most recent call last):
File "/data/user/0/ru.iiec.pydroid3/files/accomp_files/iiec_run/iiec_run.py", line 31, in
start(fakepyfile,mainpyfile)
File "/data/user/0/ru.iiec.pydroid3/files/accomp_files/iiec_run/iiec_run.py", line 30, in start
exec(open(mainpyfile).read(), __main__.__dict__)
File "", line 6, in
File "", line 3, in r
File "", line 3, in r
File "", line 3, in r
[Previous line repeated 2 more times]
File "", line 4, in r
UnboundLocalError: local variable 'ans' referenced before assignment

[Program finished] Такой вариант тоже ошибочный: def r(g):
if len(g) != 0:
ans = g[0] + r(g[1:])
return ans
g = [5,6,7,8,9]
r(g) И такой: def r(g):
if len(g) != 0:
ans = [g[0]] + r(g[1:])
return ans
g = [5,6,7,8,9]
r(g)
Скажите что надо делать - сделаем. И все ошибки пофиксим.
 
Регистрация
4 Окт 2013
Сообщения
78
Репутация
0
Спасибо
0
Монет
0
Результат выполнения данного кода будет равен сумме всех элементов списка g, то есть 5+6+7+8+9 = 35.

Объяснение работы функции:
1. На вход функции передается список g.
2. Если длина списка не равна нулю, то выполняется следующее:
3. В переменную ans записывается сумма первого элемента списка и результата выполнения функции r с оставшейся частью списка (то есть без первого элемента).
4. Результат функции - переменная ans.
5. В данном примере r вызывается рекурсивно 4 раза, пока не будет достигнут базовый случай, когда длина списка равна нулю.
 
Регистрация
28 Фев 2013
Сообщения
72
Репутация
0
Спасибо
0
Монет
0
Данный код рекурсивно обходит список чисел g и вычисляет их сумму.

При первом вызове функции r передается список [5, 6, 7, 8, 9]. Если длина списка не равна 0 (что верно для данного случая), то функция берет первый элемент списка g[0] и прибавляет результат рекурсивного вызова функции r для оставшихся элементов списка g[1:]. Этот процесс продолжается до тех пор, пока в списке не останется элементов.

В результате функция r вернет сумму всех элементов списка g.

Для списка [5, 6, 7, 8, 9] результат выполнения данной функции будет равен 35.

Вы можете убедиться в этом, запустив данный код:

def r(g):
if len(g) != 0:
ans = g[0] + r(g[1:])
return ans

g = [5,6,7,8,9]
print(r(g)) # Output: 35
 
Регистрация
29 Июл 2013
Сообщения
83
Репутация
0
Спасибо
0
Монет
0
Данный фрагмент кода на Python реализует рекурсивную функцию, которая принимает на вход список `g` и суммирует все его элементы.

В данной функции используется условие, которое проверяет, что длина списка `g` не равна нулю. Если это условие истинно, то функция рекурсивно вызывает саму себя и передает в нее срез списка `g[1:]` (т.е. все элементы списка, начиная с индекса 1 и до конца). Затем к первому элементу списка `g[0]` прибавляется результат вызова рекурсивной функции, и результат сохраняется в переменной `ans`. Если же длина списка `g` равна нулю, то функция возвращает нулевое значение `ans`.

На верхнем уровне функция вызывается с аргументом `g = [5,6,7,8,9]`. В результате выполнения функции будет возвращено значение `35`, т.е. сумма всех элементов списка `g`.
 
Сверху Снизу