
Срочно, пожалуйста! ДАЮ 40 БАЛЛОВ! Определите, что выведет на экран программа при вызове F(5)? (С
решением желательно) procedure F(n: integer); begin if n>0 then begin F(n-1); write(n); F(n div 4); end end;

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

Ответ:
1234151
Объяснение:
процедура F(n):
если n > 0, то
1. вызов процедуры F(n-1)
2. вывод n
3. вызов процедуры F(n div 4)
1) F(5) n = 5
5 > 0 Да
1. F (4) 5 - 1 = 4
2) F(4) n = 4
4 > 0 Да
1. F (3) 4 - 1 = 3
3) F(3) n = 3
3 > 0 Да
1. F (2) 3 - 1 = 2
4) F(2) n = 2
2 > 0 Да
1. F (1) 2 - 1 = 1
5) F(1) n = 1
1 > 0 Да
1. F (0) 1 - 1 = 0
6) F(0) n = 0
0 > 0 НЕТ
возвращаемся к пункту 5
5) F(1) n = 1
2. вывод 1
3. F(0) 1 div 4 = 0
7) F(0) n = 0
0 > 0 НЕТ
возвращаемся к пункту 5
5) F(1) n = 1
пункт 5 закончен
возвращаемся к пункту 4
4) F(2) n = 2
2. вывод 2
3. F(0) 2 div 4 = 0
8) F(0) n = 0
0 > 0 НЕТ
возвращаемся к пункту 4
4) F(2) n = 2
пункт 4 закончен
возвращаемся к пункту 3
3) F(3) n = 3
2. вывод 3
3. F(0) 3 div 4 = 0
9) F(0) n = 0
0 > 0 НЕТ
возвращаемся к пункту 3
3) F(3) n = 3
пункт 3 закончен
возвращаемся к пункту 2
2) F(4) n = 4
2. вывод 4
3. F(1) 4 div 4 = 1
10) F(1) n = 1
1 > 0 Да
1. F(0) 1 - 1 = 0
11) F(0) n = 0
0 > 0 НЕТ
возвращаемся к пункту 10
10) F(1) n = 1
2. вывод 1
3. F(0) 1 div 4 = 0
12) F(0) n = 0
0 > 0 НЕТ
возвращаемся к пункту 10
10) F(1) n = 1
пункт 10 закончен
возвращаемся к пункту 2
2) F(4) n = 4
пункт 2 закончен
возвращаемся к пункту 1
1) F(5) n = 5
2. вывод 5
3. F(1) 5 div 4 = 1
13) F(1) n = 1
2. вывод 1
3. F(0) 1 div 4 = 0
14) F(0) n = 0
0 > 0 НЕТ
возвращаемся к пункту 13
13) F(1) n = 1
пункт 13 закончен
возвращаемся к пункту 1
1) F(5) n = 5
пункт 1 закончен
программа закончена



Программа рекурсивно вызывает процедуру F(n)
, пока n > 0
. Она сначала вызывает F(n-1)
, затем выводит значение n
, и наконец вызывает F(n div 4)
.
Давайте рассмотрим, что произойдет при вызове F(5)
:
F(5)
вызываетF(4)
(потому что5 > 0
).F(4)
вызываетF(3)
и выводит4
.F(3)
вызываетF(2)
и выводит3
.F(2)
вызываетF(1)
и выводит2
.F(1)
вызываетF(0)
и выводит1
.
Теперь начнем возвращаться из рекурсии:
F(0)
не вызывает других функций и завершается.
Теперь вернемся к вызовам F(n div 4)
:
F(1 div 4)
равносильноF(0)
и завершается.F(2 div 4)
равносильноF(0)
и завершается.F(3 div 4)
равносильноF(0)
и завершается.F(4 div 4)
равносильноF(1)
.F(1)
вызываетF(0)
и выводит1
.
Таким образом, программа при вызове F(5)
выведет на экран следующую последовательность: 4321101
.
Полученный результат:
4321101
Надеюсь, это помогло! Если у вас есть еще какие-либо вопросы, не стесняйтесь задать их.


Похожие вопросы
Топ вопросов за вчера в категории Информатика







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