, ВСЁ ЧТО ЕСТЬ И В ПРОФИЛЕ ТАКОЕ ЖЕ БУДЕТ С 50. УМНЫЕ РЕБЯТА, Я ЗНАЮ ВЫ ЕСТЬ, ОБРАТИТЕ ВНИМАНИЯ
1)Дан рекурсивный алгоритм:
procedure F(n: integer);
begin
writeln(n);
if n < 5 then begin
F(n+3);
F(n*3)
end
end;
Напишите те числа, которые будут выведены при вызове F(1)
2)Определите, какое число будет напечатано в результате выполнения следующего алгоритма:
Var a,b,t,M,R:integer;
Function F(x:integer):integer;
begin
F:=3*(x-2)*(x+6);
end;
BEGIN
a:=-20; b:=20;
M:=a; R:=F(a);
for t:=a to b do begin
if (F(t)
M:=t;
R:=F(t);
end;
end;
write(R);
END.
G(9) = 9! = 362880
Объяснение:
Из условия задачи видно, что функция G рекурсивная, с условием завершения рекурсии при G(1) = 1
Тогда найдём значение при n = 9
Для удобства я буду обозначать -> как вхождение в рекурсию:
G(9) = G(8) * 9 -> G(7) *8 -> G(6) * 7 -> G(5) * 6 -> G(4) * 5 -> G(3) * 4 -> G(2) * 3 -> G(1) * 2 -> G(1) - это последовательность вызовов данной рекурсии, вглядевшись в которую можно увидеть факториал, откуда
G(9) = 9! = 362880
Теперь же пройдёмся обратно по рекурсии, где -> обозначает выход из рекурсии
G(1) = 1 -> G(2) = 1 * 2 = 2 -> G(3) = 2 * 3 = 6 -> G(4) = 6 * 4 = 24 -> G(5) = 24 * 5 = 120 -> G(6) = 120 * 6 = 720 -> G(7) = 720 * 7 = 5040-> G(8) = 5040 * 8 = 40320 -> G(9) = 40320 * 9 = 362880
Program CountA;
Uses Crt;
var a,n,x,i:integer;
begin
clrscr; // очищаем экран
write('Введите число n:');
readln(n); // ввод данных
write('Введите цифру а: ');
readln(a); // ввод данных
x:=1; i:=0; i-счётчик цифр а
while (n<>0) do // Пока n не стало равным нулю
begin
x:=n mod 10; // в x остаток от деления на 10 т.е -отдельная цифра числа
if (a=x) then i:=i+1; если есть совпадение то i увеличиваем на 1
n:=n div 10; переходим к следующему разряду числа (сотни десятки единицы)
end;
writeln('Цифра ',а,' Встречается в данном числе-', i, ' раз(а)');
readkey; // Пауза до нажатия на любую клавишу
end.