Записана рекурсивная функция:
procedure F(n:integer);
begin
write (n);
if n>2 then
begin
f(n-1);
f(n-2);
f(n-3)
end;
//что выведет программа при вызове f(4)?
end;
begin
f (4);
readln
end.
Никак не могу понять, откуда 021 в конце? Объясните пожалуйста.
10 января 2016
Потому что при вызове F(4) сначала будет вызвана процедура F(3), которая, с свою очередь, вызовет F(2), F(1), F(0), и на экране появится 43210
Затем F(4) вызовет процедуру F(2), которая никакую процедуру не вызовет, а только выведет на экран 2, на экране появится 432102
Затем F(4) вызовет F(1), которая так-же ничего не вызовет, но выведет на экран 1, и на экране появится 4321021
А можете подсказать,как правильно последовательность чисел записать в ответе? У меня уже было задание,только нужно было записать сумму,так было легче,а в данном случае у меня получилась последовательность 4321210
Источник: infbu.ru
11 Задание ЕГЭ Информатика Рекурсия
Что выведет программа при вызове f 4
Привет Лёва Середнячок
Что выведет программа при вызове f(4)? Ответ — 4321021, объясните, пожалуйста, откуда взялся 0?
Комментарии
Рекурсию руками за 5 баллов раскручивать? Мазохизм это.
3 (2 оценки)
averutin 7 лет назад
Светило науки — 147 ответов — 0 раз оказано помощи
при втором вызове процедуры, когда n=3 процедура получает на вход f(3), а так как 3>2, выполняется условие IF и в третьей строки получается что 3-3 — вот и ваш 0.
Источник: vashurok.com
Что выведет программа при вызове f(4)? Ответ — 4321021, объясните, пожалуйста, откуда взялся 0?
при втором вызове процедуры, когда n=3 процедура получает на вход f(3), а так как 3>2, выполняется условие IF и в третьей строки получается что 3-3 — вот и ваш 0.
Автор ответа: raindrops1
Это я понимаю, но там тогда бы ноль стоял после 2 и 1, почему он именно на этом месте?
Автор ответа: averutin
потому что однин раз вызвав процедуру из главной программы, она сама себя вызывает ещё 5 раз, до тех пор, пока значение х не станет меньше 2
Автор ответа: averutin
Источник: sous-otvet.net