Программа курса:
Разбор задачи: Подъем по лестнице
Предложенный нами код решения:
def stairs(n):
"""
Возвращает количество различных способов подняться на вершину лестницы из n ступеней,
где за один шаг можно преодолеть 1 или 2 ступени.
"""
# Если ступенек нет или одна, количество способов равно n
if n <= 1:
return 1
# Инициализируем значения для первых двух ступенек
first, second = 1, 1
# Используем итеративный подход для вычисления количества способов
for i in range(2, n + 1):
current = first + second
first, second = second, current
return secondШаг 1: Базовый случай
if n <= 1:
return 1
- Если лестница имеет 0 или 1 ступень, то существует только 1 способ подняться:
- Для
n = 0: ничего не делаем, это 1 способ. - Для
n = 1: делаем один шаг, это 1 способ.
- Для
Шаг 2: Инициализация переменных
first, second = 1, 1
- Мы используем переменные
firstиsecondдля хранения количества способов подняться на предыдущие две ступени. - Изначально:
first = 1(количество способов подняться на 0 ступеней),second = 1(количество способов подняться на 1 ступень).
Шаг 3: Итеративный подсчет
python
Копировать код
for i in range(2, n + 1):
current = first + second
first, second = second, current
- Цикл проходит от 2 до n.
- На каждой итерации:
- Вычисляем
current:current = first + second: количество способов подняться на текущую ступень равно сумме способов подняться на предыдущие две ступени.
- Обновляем значения:
firstстановится равнымsecond(количество способов подняться на одну ступень ниже),secondстановится равнымcurrent(количество способов подняться на текущую ступень).
- Вычисляем
Шаг 4: Возврат результата
return second
- После выполнения цикла, переменная
secondсодержит количество способов подняться наnступеней.
Пример работы алгоритма
Вход: n = 5
Инициализация:
first = 1,second = 1.
Итерации:
i = 2:current = first + second = 1 + 1 = 2- Обновляем:
first = 1,second = 2.
i = 3:current = first + second = 1 + 2 = 3- Обновляем:
first = 2,second = 3.
i = 4:current = first + second = 2 + 3 = 5- Обновляем:
first = 3,second = 5.
i = 5:current = first + second = 3 + 5 = 8- Обновляем:
first = 5,second = 8.
Результат:
- Возвращается
second = 8.
Аналогия с последовательностью Фибоначчи
- Количество способов подняться на
nступеней соответствуетn+1числу в последовательности Фибоначчи. - Например:
- Для
n = 0: число 1 (нулевое число в Фибоначчи). - Для
n = 1: число 1. - Для
n = 2: число 2. - Для
n = 3: число 3. - Для
n = 4: число 5. - Для
n = 5: число 8.
- Для
DeaglenS
,def stairs(n):
if n == 0:
return 1
if n == -1:
return 0
return stairs(n-1) + stairs(n-2)