Рекурсия. Пример работы с натуральным числом

Задача:

  • Дано натуральное число. С помощью рекурсии определить разницу между минимальной и максимальной цифрой этого числа и найти сумму максимальной и минимальной цифры этого числа.
    К сведению:

  • Отрицательные и нецелые числа натуральными не являются.
Сама задача не напрашивает себе применения рекурсии, но мне кажется сам пример именно на рекурсии очень познавателен и полезен:

В этом примере параметр, принимающий значение входящего в функцию аргумента, внутри функции не изменяется. Само число на каждом рекурсивном шаге делится на 10, а из полученного делением числа выдирается последняя цифра, которая записывается в переменную temp. Контрольной точкой для прекращения рекурсивных вызовов является момент времени, когда результатом очередного деления оказывается ноль. Ссылочные параметры используются для того, чтобы каждый новый экземпляр функции не создавал копий ради них, а просто чтобы подставлял одну и ту же сущность: непосредственный аргумент. Так у нас получается два непосредственных аргумента, которые изменяются множеством экземпляров функций, если условие для изменения справедливо.
Процесс работы программы при заданном N = 12345 можно описать так:
будут созданы функции, в параметры которых придут следующие значения:
12’345
(12’345/10) ==> 1’234
(1’234/10) ==> 123
(123/10) ==> 12
(12/10) ==> 1
(1/10=0 — возврат не рекурсивный) ==> 0

Итого: 6 экземпляров функций, где значение каждого параметра отлично от значения параметра любого другого экземпляра функции.

Поскольку параметры min и max имеют тип ссылочного характера — любой экземпляр функции может повлиять на ушедший в функцию аргумент напрямую. Чем мы и пользуемся, когда проверяем значение на минимум и максимум. Проверяем параметр и если результат проверки положительный — изменяем значение параметра, чем влечём прямое изменение ушедшего в функцию аргумента.
Ход изменений значений в temp для каждого нового экземпляра функции при N = 12345 выглядит приблизительно так:
12 345 % 10 == 5 //Получили самую правую цифру числа
12 34 % 10 == 4 //Получили вторую справа цифру числа
123 % 10 == 3 //Получили третью справа цифру числа
12 % 10 == 2 //Получили четвёртую справа цифру числа
1 % 10 == 1 //Получили пятую справа цифру числа
В начале работы с рекурсивной функцией нужно определить первые значения минимуму и максимуму. Разумеется, и минимум, и максимум — должны входить в заданное число. Очень удобно взять самую правую цифру, а потом уже сверять с получаемыми остатками и, при необходимости, их изменять.

Один комментарий на «“Рекурсия. Пример работы с натуральным числом”»

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Поиск

 
     

Случайная книга в электронном формате

https://www.litres.ru/mihail-flenov/php-glazami-hakera-4986825/?lfrom=15589587
Яндекс.Метрика