Рекурсия: сколько есть программ, которые преобразуют заданное число (по определенному алгоритму) в 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.