Задача
МакКарти — известный теоретик компьютерных наук. В одной из своих работ он определил рекурсивную функцию $f_{91}$, которая определена для всякого натурального числа $n$ следующим образом:
Если $n\leqslant100$, то $f_{91}\left(n\right) = f_{91}\left(f_{91}\left(n+11\right)\right)$;
Если $n\geqslant101$, то $f_{91}\left(n\right) = n-10$.
Входные данные
Натуральное число $n$, не большее $1000000$.
Выходные данные
Значение $f_{91}\left(n\right)$.
Тесты
№ | ВХОДНЫЕ ДАННЫЕ | ВЫХОДНЫЕ ДАННЫЕ |
1 | 5 | 91 |
2 | 27 | 91 |
3 | 91 | 91 |
4 | 100 | 91 |
5 | 102 | 92 |
6 | 180 | 170 |
Код
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
#include <iostream> using namespace std; long f91(long n) { if(n <= 100){ return 91; } else { return n - 10; } } int main() { long n; cin >> n; cout << f91(n); return 0; } |
Решение
Для решения задачи создадим функцию $f_{91}\left(n\right)$ которая в зависимости от значения $n$ будет выдавать нам разные значение, а имеено:
если $n\leqslant100$, то $f_{91}\left(n\right) = f_{91}\left(f_{91}\left(n+11\right)\right)$;
если $n\geqslant101$, то $f_{91}\left(n\right) = n-10$.
Так же, мы можем проследить законномерность того, что если $n\leqslant100$ функция $f_{91}\left(n\right)$ будет выдавть $91$, заметив это можно будет заменить сложную, но при этом красивую рекурсивную функцию на более простое и практичное решение и получить следущие соотношение:
$f_{91}\left(n\right) = \begin{cases} 91, & n\leqslant100;\\ n-10, & n\geqslant101; \end{cases}$
Вы пишите «компилятор будет выдавть 91». Компилятор «выдаёт» программу в машинных кодах, а не выполняет её. Пожалуйста, посмотрите, что такое компилятор и сформулируйте какое-то менее парадоксальное утверждение.
Когда пишите пояснение, разделяйте разработку формулы, её программирование и выполнение программы. Вы должны понимать о чем из перечисленного Вы пишите. В вашем случае, объяснения требует только разработка формулы. Остальное элементарно.
Есть одно замечание, которое нужно исправить — орфографическая ошибка в слове «рекурсивную».
Есть три замечания, которые Вам нужно прочесть и понять. Но менять в работе ничего не нужно.
И ещё сравните, пожалуйста, 2-ю строчку первого моего кода и 5-ю второго. Почему в первом я не брал тернарную операцию в скобки, а во втором это обязательно?