Разбор задачи: Подъем по лестнице

Предложенный нами код решения:

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.
  • На каждой итерации:
    1. Вычисляем current:
      • current = first + second: количество способов подняться на текущую ступень равно сумме способов подняться на предыдущие две ступени.
    2. Обновляем значения:
      • first становится равным second (количество способов подняться на одну ступень ниже),
      • second становится равным current (количество способов подняться на текущую ступень).

Шаг 4: Возврат результата

return second
  • После выполнения цикла, переменная second содержит количество способов подняться на n ступеней.

Пример работы алгоритма

Вход: n = 5

Инициализация:

  • first = 1, second = 1.

Итерации:

  1. i = 2:
    • current = first + second = 1 + 1 = 2
    • Обновляем: first = 1, second = 2.
  2. i = 3:
    • current = first + second = 1 + 2 = 3
    • Обновляем: first = 2, second = 3.
  3. i = 4:
    • current = first + second = 2 + 3 = 5
    • Обновляем: first = 3, second = 5.
  4. 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_avatar
DeaglenS
,
6 месяцев, 17 дней назад

def stairs(n):
 if n == 0:
   return 1
 if n == -1: 
   return 0
 
 return stairs(n-1) + stairs(n-2)

1

Вы должны Войти или Зарегистрироваться чтобы оставлять комментарии