16.01 Одна функция
Ошибка.
Попробуйте повторить позже
Алгоритм вычисления значения функции , где
— целое неотрицательное число, задан следующими
соотношениями:
, если
и при этом
чётно;
, если
нечётно.
Назовите минимальное значение , для которого
.
Решение динамикой:
f = [0]*4097 for n in range(1, 4097): if n == 0: f[n] = 0 elif n > 0 and n % 2 == 0: f[n] = f[n//2] else: f[n] = 1 + f[n-1] if f[n] == 12: print(n)
Решение рекурсией:
def F(n): if n == 0: return 0 if n % 2 == 0 and n > 0: return F(n / 2) if n % 2 != 0: return 1 + F(n - 1) i = 0 # Начинаем проверять числа с 0 while F(i) != 12: # Пока не нашли нужное число i i += 1 # Увеличиваем его на 1 print(i)
Ошибка.
Попробуйте повторить позже
Алгоритм вычисления значения функции , где
— натуральное число, задан следующими
соотношениями:
,
,
;
, при
.
Чему равно значение функции ?
Решение руками:
Данная в условии формула называется рекурретной. Это
означает, что значение функции от некоторого аргумента зависит от значения функций от
других аргументов. Так, чтобы найти значение
, нужно найти значение
и
, а чтобы найти найти значение
, нужно найти значение
и
(аналогично для
) и так далее (до момента, пока аргумент функции не
станет меньше или равен 3, так как для таких аргументов значение функции известно из
условия).
Нам даны значения функции для , найдем значение функции
:
;
Значение нам неизвестно, найдем его:
;
Подставим найденное значение в :
.
Решение программой:
def f(n): if n == 1: return 1 if n == 2: return 2 if n == 3: return 4 else: return 5 * f(n - 1) + 3 * f(n - 3) print(f(5))
Ошибка.
Попробуйте повторить позже
Алгоритм вычисления значения функции , где
— натуральное число, задан следующими
соотношениями:
,
;
, при
.
Чему равно значение функции ?
Решение руками:
Данная в условии формула называется рекурретной. Это означает,
что значение функции от некоторого аргумента зависит от значения функций от других аргументов.
Так, чтобы найти значение
при
, нужно найти значение
и
, а
чтобы найти найти значение
, нужно найти значение
и
(аналогично с поиском значения
) и так далее (до момента, пока аргумент функции не
станет меньше или равен 2, так как для таких аргументов значение функции известно из
условия).
Найдем значение функции :
;
;
;
;
;
;
.
Решение программой:
def f(n): if n == 1: return 1 elif n == 2: return 2 elif n > 2: return f(n - 1) + 3 * f(n - 2) print(f(6))
Ошибка.
Попробуйте повторить позже
Ниже на трех языках программирования записана рекурсивная функция (процедура) .
Решение руками:
Данная рекурсивная функция останавливается, если принимает значение 2 или меньше.
Следовательно, начнем выполнение функции, когда
. С помощью стрелочки
обозначим
печать символа на экране.
При запуске на экране появляется один символ «
». Далее никакие функции не вызываются.
.
При запуске на экране появляется один символ «
». Далее вызываются функции
и
. Так как
, то смотрим на
и добавляем количество символов от
данной функции к количеству символов от
.
.
Далее действуем по тому же принципу, возвращаясь к предыдущим значениям и добавляя количество символов к текущему:
;
;
. Т.к.
печатется один символ «
» , а также вызывались функции
и
. Так как
, то взяли кол-во символов только от
.
. Т.к.
печатется один символ «
» , а также вызывались функции
и
). Того 5 символов.
. Т.к.
печатется один символ «
» , а также вызывались функции
и
. Того 7 символов.
Решение программой:
def f(n): if n > 2: print("*") f(n - 1) f(n // 2) print(f(7))
Осталось посчитать, сколько таких символов "*"вывела программа.
Получаем ответ:
Ошибка.
Попробуйте повторить позже
Ниже на трех языках программирования записана рекурсивная функция (процедура) .
Сколько символов «» будет напечатано на экране при выполнении вызова
?
Решение руками:
Данная рекурсивная функция останавливается, если принимает значение 4 или меньше.
Следовательно, начнем выполнение функции, когда
. С помощью стрелочки
обозначим
печать символа на экране.
При запуске F(5) появляется один символ «». Далее никакие функции не вызываются.
.
При запуске появляется один символ «
». Далее вызываются функцит
и
. Так как
, то функции
и
не вызываются.
При запуске появляется один символ «
». Далее вызываются функцит
и
. Так как
, то смотрим только на
и добавляем количество символов от данной
функции к количеству символов от
.
.
Далее действуем по тому же принципу, возвращаясь к предыдущим значениям и добавляя количество символов к текущему:
. Т.к.
печатется один символ «
» , а также вызываются функции
и
. Получаем 3 символа.
. Т.к.
печатется один символ «
», а также вызываются функции
и
. В итоге получаем 4 символа.
Решение программой:
def f(n): if n > 4: print("*") f(n - 2) f(n - 3) print(f(9))
Осталось посчитать, сколько таких символов "*"вывела программа.
Получаем ответ:
Ошибка.
Попробуйте повторить позже
Ниже на трех языках программирования записана рекурсивная функция (процедура) .
Что выведет программа при вызове ? В ответе запишите последовательность выведенных цифр
слитно (без пробелов).
Решение руками:
Рассмотрим последовательно, что будет выводится на экран, начиная с . С помощью стрелочки
обозначим печать числа на экране.
;
(Выводится число, которое было получено от
);
(Выводится текущее значение
);
(Выводится число, которое было получено от
).
(Выводится число, которое было получено от
);
(Выводится текущее значение
);
(Выводится число, которое было получено от
).
(Выводится число, которое было получено от
);
(Выводится текущее значение
);
(Выводится число, которое было получено от
).
Следовательно, итоговая последовательность .
Решение программой:
def f(n): if n > 0: f(n - 1) print(n) f(n // 2) print(f(4))
Запишем последовательность чисел, которые вывела программа, в ответ.
Получаем:
Ошибка.
Попробуйте повторить позже
Алгоритм вычисления значения функции где
– натуральное число, задан следующими
соотношениями:
при
Определите значение
def f(n): if n == 0: return 1 if n == 1: return 2 if n > 1: return f(n - 1) * f(n - 2) - f(n - 2) print(f(6))
Ошибка.
Попробуйте повторить позже
Алгоритм вычисления значения функции где
– натуральное число, задан следующими
соотношениями:
при
.
Определите значение
Решение программой:
def f(n): if n == 0: return 1 elif n == 1: return 2 elif n == 2: return 3 elif n > 2: return f(n - 1) ** f(n - 3) - f(n - 2) print(f(5))
Получаем ответ:
Решение руками:
Нам даны ,
,
. Используем их, чтобы подставить в формулу:
и пишем в ответ.
Ошибка.
Попробуйте повторить позже
Алгоритм вычисления значения функции где
– натуральное число, задан следующими
соотношениями:
при
.
Определите значение
Решение руками:
Нам даны ,
,
. Используем их, чтобы подставить в формулу:
и пишем в ответ.
Решение программой:
def f(n): if n == 0: return 1 elif n == 1: return 3 elif n == 2: return 3 elif n > 2: return f(1) * f(n - 1) ** f(n - 3) + f(n - 2) print(f(4))
Получаем ответ:
Ошибка.
Попробуйте повторить позже
Алгоритм вычисления значения функции где
– натуральное число, задан следующими
соотношениями:
. При
.
Определите значение
Решение руками:
Нам даны ,
. Подставим их в формулу:
и пишем в ответ.
Решение программой:
def f(n): if n == 1: return 2 elif n == 2: return 3 elif n > 2: return 2 * f(n - 1) ** f(n - 2) + 2 print(f(4))
Получаем ответ:
Ошибка.
Попробуйте повторить позже
Алгоритм вычисления значения функции где
– число, заданное следующими соотношениями:
. При
.
Определите значение
Решение руками:
Нам даны ,
. Подставим их в формулу:
и пишем в ответ.
Решение программой:
def f(n): if n == -1: return 1 elif n == 0: return 1 elif n > 0: return f(n - 1) * f(n - 1) + f(n - 1) + f(n - 2) print(f(3))
Получаем ответ:
Ошибка.
Попробуйте повторить позже
Алгоритм вычисления значения функции где
– неотрицательное число, задан следующими
соотношениями:
. При
.
Определите значение
Решение руками:
В условии нам даны и
. Используем их для решения задачи:
и будет ответом на вопрос задачи.
Решение программой:
def f(n): if n == 0: return 2 elif n == 1: return 3 elif n > 1: return f(n - 2) * f(n - 1) + n print(f(5))
Получаем ответ:
Ошибка.
Попробуйте повторить позже
Алгоритм вычисления значения функции где
– натуральное число, задан следующими
соотношениями:
. При
.
Определите значение
Решение руками:
В условии нам дано . Подставим его значение в формулу для решения задачи:
и будет ответом на вопрос задачи.
Решение программой:
def f(n): if n == 1: return 2 elif n > 1: return n * n + f(n - 1) print(f(7))
Получаем ответ:
Ошибка.
Попробуйте повторить позже
Алгоритм вычисления значения функции где
– целое неотрицательное число, задан
следующими соотношениями:
. При
.
Определите значение
Решение руками:
В условии нам даны ,
,
. Используем их значения для решения задачи:
и будет ответом на вопрос задачи.
Решение программой:
def f(n): if n == 0: return 1 elif n == 1: return 2 elif n > 1: return f(n - 1) * (n - 1) + f(n - 2) print(f(6))
Получаем ответ:
Ошибка.
Попробуйте повторить позже
Алгоритм вычисления значения функции где
– неотрицательное число, задан следующими
соотношениями:
. При
.
Определите значение
Решение руками:
В условии нам даны ,
. Так давайте используем их для решения задачи:
и будет ответом на вопрос задачи.
Решение программой:
def f(n): if n == 0: return 1 elif n == 1: return 2 elif n > 1: return (n + 1) * f(n - 1) + f(n - 2) print(f(5))
Получаем ответ:
Ошибка.
Попробуйте повторить позже
Алгоритм вычисления значения функции F(n), где n > -2 – целое число, задан следующими соотношениями:
при
Определите значение
Решение руками:
Нам даны
и
. Используем их и подставляем в формулу:
и будет ответом на задание.
Решение программой:
def f(n): if n == -1: return 0 elif n == 0: return 1 elif n == 1: return 1 elif n > 1: return f(n - 1) * f(n - 2) - f(n - 3) print(f(6))
Получаем ответ:
Ошибка.
Попробуйте повторить позже
Процедура совершает следующие действия:
- Вывод на экран значения
- Если
, вызов следующих процедур:
;
;
Что выведет программа при вызове ? В ответе запишите последовательность выведенных цифр
слитно (без пробелов).
Решение руками:
Рассмотрим последовательно, что будет выводится на экран, начиная с . Пока
другие функции вызываться не будут. С помощью стрелочки
обозначим печать числа на
экране.
;
;
;
.
Далее при дополнительно будут вызываться функции. Мы будем возвращаться каждый раз к
предыдущим значениям и добавлять числа в последовательность:
;
;
;
.
;
;
;
.
Следовательно, итоговая последовательность 6543243.
Решение программой:
def f(n): print(n) if n >= 5: f(n - 1) f(n - 2) f(n - 3) print(f(6))
Получаем ответ:
Ошибка.
Попробуйте повторить позже
Процедура совершает следующие действия:
|
Что выведет программа при вызове ? В ответе запишите последовательность выведенных цифр
слитно (без пробелов).
Решение руками:
Рассмотрим последовательно, что будет выводится на экран, начиная с . С помощью стрелочки
обозначим печать числа на экране.
(Выводится только текущее значение
, другие функции не вызываются);
(Выводится только текущее значение
, другие функции не вызываются);
(Выводится число, которое было получено от
;
(Выводится текущее значение
).
(Выводится число, которое было получено от
);
(Выводится текущее значение
);
(Выводится число, которое было получено от
).
(Выводится число, которое было получено от
);
(Выводится текущее значение
);
(Выводится число, которое было получено от
).
Следовательно, итоговая последовательность .
Решение программой:
def f(n): if n > 0: f(n - 2) print(n) f(n - 3) print(f(5))
Получаем ответ:
Ошибка.
Попробуйте повторить позже
Процедура совершает следующие действия:
|
Что выведет программа при вызове ? В ответе запишите последовательность выведенных цифр
слитно (без пробелов).
Данная рекурсивная функция останавливается, если принимает значение 2 или меньше.
Следовательно, начнем выполнение функции, когда
.
С помощью стрелочки обозначим печать символа на экране.Рассмотрим последовательно, что
будет выводится на экран, начиная с
:
(От данного значения нет вывода числа на экран);
(От данного значения нет вывода числа на экран);
(Выводится текущее значение
).
(Выводится число, которое было получено от
в предыдущем шаге);
(От данного значения нет вывода числа на экран);
(Выводится текущее значение
).
(Выводится число, которое было получено от
в предыдущем шаге);
(От данного значения нет вывода числа на экран);
(Выводится текущее значение
).
(Выводится число, которое было получено от
в предыдущем шаге);
(Выводится число, которое было получено от
);
(Выводится текущее значение
).
Следовательно, итоговая последовательность .
Ошибка.
Попробуйте повторить позже
Алгоритм вычисления значения функции , где
– целое число, задан следующими
соотношениями:
при
Определите значение
Решение руками:
Нам даны
и
. Используем их и подставляем в формулу:
1 и будет ответом на задание.
Решение программой:
def f(n): if n == -1: return 0 elif n == 0: return 1 elif n == 1: return 1 elif n > 1: return f(n - 1) * f(n - 2) - f(n - 3) print(f(6))
Получаем ответ: