Разница между оператором if и оператором elif в Python [дубликат]Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Разница между оператором if и оператором elif в Python [дубликат]

Сообщение Anonymous »

В настоящее время я изучаю CS61A и выполняю задания по следующим темам.
Проблема описана следующим образом.
Я дал первое решение.
Но оно вызвал ошибку RecursionError.

Код: Выделить всё

def stair_ways(n):
"""
Yield all the ways to climb a set of n stairs taking
1 or 2 steps at a time.

>>> list(stair_ways(0))
[[]]
>>> s_w = stair_ways(4)
>>> sorted([next(s_w) for _ in range(5)])
[[1, 1, 1, 1], [1, 1, 2], [1, 2, 1], [2, 1, 1], [2, 2]]
>>> list(s_w) # Ensure you're not yielding extra
[]
"""
if n == 0:
yield []
if n == 1:
yield [1]
else:
for i in stair_ways(n-1):
yield [1]+i
for i in stair_ways(n-2):
yield [2]+i

n=4
result = stair_ways(n)
print([next(result) for i in range(5)])

Код: Выделить всё

Traceback (most recent call last):
File "E:\Code\CS61A\test.py", line 150, in 
print([next(result) for i in range(5)])
^^^^^^^^^^^^
File "E:\Code\CS61A\test.py", line 143, in stair_ways
for i in stair_ways(n-1):
File "E:\Code\CS61A\test.py", line 143, in stair_ways
for i in stair_ways(n-1):
File "E:\Code\CS61A\test.py", line 145, in stair_ways
for i in stair_ways(n-2):
File "E:\Code\CS61A\test.py", line 143, in stair_ways
for i in stair_ways(n-1):
File "E:\Code\CS61A\test.py", line 143, in stair_ways
for i in stair_ways(n-1):
File "E:\Code\CS61A\test.py", line 143, in stair_ways
for i in stair_ways(n-1):
[Previous line repeated 993 more times]
RecursionError: maximum recursion depth exceeded

Затем я изменил оператор if на оператор elif и получил правильный результат.

Код: Выделить всё

def stair_ways(n):
if n == 0:
yield []
elif n == 1:
yield [1]
else:
for i in stair_ways(n-1):
yield [1]+i
for i in stair_ways(n-2):
yield [2]+i

n=4
result = stair_ways(n)
print([next(result) for i in range(5)])

Код: Выделить всё

>>> [[1, 1, 1, 1], [1, 1, 2], [1, 2, 1], [2, 1, 1], [2, 2]]
Поэтому мне интересно, почему это изменение заставило программу дать правильный ответ.
Спасибо!
Что случилось с программой, когда Я изменил оператор if на оператор elif, который дал правильный ответ.

Подробнее здесь: https://stackoverflow.com/questions/791 ... -in-python
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»