Новая Школа - онлайн-школа подготовки к ЕГЭ
Задача Задача №40919
А
Аноним
11 ноября 2023 12:29 · публичный вопрос
А
Аноним

Определите, сколько символов * выведет эта процедура при вызове F(280): Python Паскаль C++ def F( n ): print('*') if n = 1: print('*') F(n-1) F(n3) print('*') procedure F( n: integer ); begin write('*'); if n = 1 then begin write('*'); F(n-1); F(n div 3); write('*'); end; end; void F( int n ) { cout '*'; if( n = 1 ) { cout '*'; F(n-1); F(n/3); cout '*'; } }

Нейросеть11 ноября 2023 12:29

Привет! 🙌

Ну, кажется, где-то затесалась ошибка — количество символов "*" определённо больше одного. Давай разберём задачу:

Процедура F(n) печатает символ "" несколько раз: как минимум один раз в начале, затем ещё один, если n >= 1, и два рекурсивных вызова процедуры — первый с параметром n-1, второй с параметром n//3 (то есть деление нацело), и ещё один символ "" после рекурсивных вызовов.

Рекурсия здесь устроена таким образом, что каждый следующий вызов уменьшается либо на 1, либо делится на 3, что значительно увеличивает количество символов по сравнению с твоим ответом в "1".

Подсчёт итогового количества символов здесь лучше всего реализовать, написав аналогичную программу, так как делать это вручную довольно сложно из-за большой глубины рекурсии. Судя по правильному ответу, функция F(280) выведет 2468785 символов "*".

В твоём ответе, видимо, произошёл недочёт при понимании, насколько разрастается дерево вызовов функции. Помни, что рекурсия — это функция, которая вызывает сама себя, и каждый вызов функции увеличивает счётчик символов.

Оцени, пожалуйста, объяснил ли я понятно, что и где пошло не так с помощью лайка или дизлайка! 👍👎

Определите, сколько символов * выведет эта процедура при вызове F(280): Python Паскаль C++ def F( n ): print('*') if n = 1: print('*') F(n-1) F(n3) print('*') procedure F( n: integer ); begin write('*'); if n = 1 then begin write('*'); F(n-1); F(n div 3); write('*'); end; end; void F( int n ) { cout '*'; if( n = 1 ) { cout '*'; F(n-1); F(n/3); cout '*'; } }
Привет! 🙌 Ну, кажется, где-то затесалась ошибка — количество символов "*" определённо больше одного. Давай разберём задачу: Процедура `F(n)` печатает символ "*" несколько раз: как минимум один раз в начале, затем ещё один, если `n >= 1`, и два рекурсивных вызова процедуры — первый с параметром `n-1`, второй с параметром `n//3` (то есть деление нацело), и ещё один символ "*" после рекурсивных вызовов. Рекурсия здесь устроена таким образом, что каждый следующий вызов уменьшается либо на 1, либо делится на 3, что значительно увеличивает количество символов по сравнению с твоим ответом в "1". Подсчёт итогового количества символов здесь лучше всего реализовать, написав аналогичную программу, так как делать это вручную довольно сложно из-за большой глубины рекурсии. Судя по правильному ответу, функция F(280) выведет 2468785 символов "*". В твоём ответе, видимо, произошёл недочёт при понимании, насколько разрастается дерево вызовов функции. Помни, что рекурсия — это функция, которая вызывает сама себя, и каждый вызов функции увеличивает счётчик символов. Оцени, пожалуйста, объяснил ли я понятно, что и где пошло не так с помощью лайка или дизлайка! 👍👎