Рекурсия: сколько есть программ, которые преобразуют заданное число (по определенному алгоритму) в 24? - Free Pascal
Формулировка задачи:
Помогите пожалуйста с решение задачи, я не понимаю как решать рекурсией
У исполнителя калькулятора две команды
1) прибавить 1
2) увеличить каждый разряд числа на 1
Например число 23 с помощью команды 2 превратится в 34. Если перед выполнением команды 2 какой-либо цифра равна 9, она не изменяется.
Сколько есть программ, которые преобразует числа 24 в число 46?
Суть всей программы в том, что мне нужно сделать ее рекурсией и чтобы она проверяла все цифры от (0..999) а не от 24
если не трудно, то с комментарием)
Заранее спасибо
Решение задачи: «Рекурсия: сколько есть программ, которые преобразуют заданное число (по определенному алгоритму) в 24?»
textual
Листинг программы
var count : integer = 0; finish : integer = 46; procedure f(n : integer); begin if n = finish then inc(count) else if n < finish then begin f(n + 1); if n < 10 then f(n + 1) // 1 .. 9 else f((1 + n div 10) * 10 + (1 + n mod 10)); // 10 .. 45 end; end; var start : integer; begin write('Начинаем с: '); readln(start); f(start); // начинаем с введенного числа. Заканчиваем числом 46 writeln(count); end.
Объяснение кода листинга программы
- Объявлены две переменные:
count
типа integer со значением 0 иfinish
типа integer со значением 46. - Определена процедура
f
с параметромn
типа integer. - В начале процедуры
f
выполняется проверка: еслиn
равноfinish
, то значение переменнойcount
увеличивается на 1. - Если
n
меньшеfinish
, то процедураf
вызывается рекурсивно для значенияn + 1
. - Если
n
меньше 10, то процедураf
вызывается рекурсивно для значенияn + 1
. - Если
n
больше или равно 10, тоn
приводится к виду10 * (1 + (n div 10)) + (1 + n mod 10)
. - Затем вызывается процедура
f
с введенным значением переменнойstart
. - В конце выводится значение переменной
count
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д