Срочно, пожалуйста! ДАЮ 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
