
Паскаль: 43 - Рекурсивные алгоритмы Помогите, что знаете, хотя бы на 3 задания 2. Алгоритм
вычисления значения функции F(n), где n - натуральное число, задан следующими соотношениями: F(0) = 1, F(1) = 1 F(n) = F(n-1)+F(n-2), при n > 1 Чему равно значение функции F(7)? 3. Алгоритм вычисления значения функции F(n), где n - натуральное число, задан следующими соотношениями: F(0) = 1, F(1) = 1 F(n) = F(n-1)*F(n-2)+2, при n > 1 Чему равно значение функции F(5)? 5. Дан рекурсивный алгоритм: procedure F(n: integer); begin writeln('*'); if n > 0 then begin F(n-2); F(n-2); F(n div 2); end end; Сколько символов "звездочка" будет напечатано на экране при выполнении вызова F(6)? 6. Дан рекурсивный алгоритм: procedure F(n: integer); begin writeln('*'); if n > 0 then begin F(n-3); F(n-2); F(n div 2); F(n div 2); end end; Сколько символов "звездочка" будет напечатано на экране при выполнении вызова F(6)? 7. Дан рекурсивный алгоритм: procedure F(n: integer); begin writeln('*'); if n > 0 then begin writeln('*'); F(n-2); F(n-2); F(n div 2); end end; Сколько символов "звездочка" будет напечатано на экране при выполнении вызова F(6)?

Ответы на вопрос

Задание 2.
program prog;
function F(n:integer):integer;
begin
if n<=1 then F:=1
else F:=F(n-1)+F(n-2)
end;
begin
write(F(7))
end.
Вывод программы: 21
Задание 3.
program prog;
function F(n:integer):integer;
begin
if n<=1 then F:=1
else F:=F(n-1)*F(n-2)+2
end;
begin
write(F(5))
end.
Вывод программы: 87
Задание 5.
program prog;
procedure F(n:integer);
begin
write('*');
if n > 0 then begin
F(n-2);
F(n-2);
F(n div 2);
end
end;
begin
F(5);
end.
Вывод программы (34 звёздочки):
**********************************
Задание 6.
program prog;
procedure F(n: integer);
begin
write('*');
if n > 0 then begin
F(n-3);
F(n-2);
F(n div 2);
F(n div 2);
end
end;
begin
F(6);
end.
Вывод программы (97 звёздочек):
*************************************************************************************************
Задание 7.
program prog;
procedure F(n: integer);
begin
write('*');
if n > 0 then begin
write('*');
F(n-2);
F(n-2);
F(n div 2);
end
end;
begin
F(6);
end.
Вывод программы (77 звёздочек):
*****************************************************************************



Для решения этих задач, мы можем использовать рекурсивные функции. Давайте рассмотрим каждую задачу по очереди:
- Алгоритм вычисления значения функции F(n), где n - натуральное число, задан следующими соотношениями: F(0) = 1, F(1) = 1, F(n) = F(n-1) + F(n-2), при n > 1. Чему равно значение функции F(7)?
Для вычисления F(7) с помощью рекурсии, используем следующий Pascal-код:
pascalfunction F(n: integer): integer; begin if n = 0 then F := 1 else if n = 1 then F := 1 else F := F(n-1) + F(n-2); end;
Вызываем функцию и выводим результат:
pascalwriteln(F(7)); // Выведет 13
- Алгоритм вычисления значения функции F(n), где n - натуральное число, задан следующими соотношениями: F(0) = 1, F(1) = 1, F(n) = F(n-1) * F(n-2) + 2, при n > 1. Чему равно значение функции F(5)?
Для вычисления F(5) с помощью рекурсии, используем следующий Pascal-код:
pascalfunction F(n: integer): integer; begin if n = 0 then F := 1 else if n = 1 then F := 1 else F := F(n-1) * F(n-2) + 2; end;
Вызываем функцию и выводим результат:
pascalwriteln(F(5)); // Выведет 9
- Дан рекурсивный алгоритм:
pascalprocedure F(n: integer); begin writeln('*'); if n > 0 then begin F(n-2); F(n-2); F(n div 2); end; end;
Сколько символов "*" будет напечатано на экране при выполнении вызова F(6)?
Давайте рассмотрим шаги вызова функции:
- F(6) вызывает F(4) два раза и F(3) один раз.
- F(4) вызывает F(2) два раза и F(2) один раз.
- F(2) вызывает F(0) два раза и F(0) один раз.
Таким образом, "*" будет напечатано 2 * 2 + 2 * 2 + 2 * 1 = 10 раз.
- Дан рекурсивный алгоритм:
pascalprocedure F(n: integer); begin writeln('*'); if n > 0 then begin F(n-3); F(n-2); F(n div 2); F(n div 2); end; end;
Сколько символов "*" будет напечатано на экране при выполнении вызова F(6)?
Давайте рассмотрим шаги вызова функции:
- F(6) вызывает F(3) два раза, F(4) один раз и F(3) один раз.
- F(3) вызывает F(0) два раза и F(1) два раза.
- F(4) вызывает F(1) два раза и F(2) один раз.
- F(2) вызывает F(0) два раза и F(0) два раза.
Таким образом, "*" будет напечатано 2 * 2 + 1 * 2 + 2 * 2 + 2 * 2 = 12 раз.
- Дан рекурсивный алгоритм:
pascalprocedure F(n: integer); begin writeln('*'); if n > 0 then begin writeln('*'); F(n-2); F(n-2); F(n div 2); end; end;
Сколько символов "*" будет напечатано на экране при выполнении вызова F(6)?
Давайте рассмотрим шаги вызова функции:
- F(6) вызывает F(4) два раза и F(3) один раз.
- F(4) вызывает F(2) два раза и F(2) один раз.
- F(2) вызывает F(0) два раза и F(0) один раз.
- F(3) вызывает F(1) два раза и F(2) один раз.
- F(2) вызывает F(0) два раза и F(0) один раз.
Таким образом, "*" будет напечатано 2 * 2 + 1 * 2 + 2 * 2 + 2 * 2 = 12 раз.


Похожие вопросы
Топ вопросов за вчера в категории Информатика
Последние заданные вопросы в категории Информатика
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili