Новая Школа - онлайн-школа подготовки к ЕГЭ
Задача Задача №18836
А
Аноним
27 сентября 2023 04:39 · публичный вопрос
А
Аноним

Определите, сколько символов * выведет эта процедура при вызове 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 '*'; } }

Нейросеть27 сентября 2023 04:39

Привет! Посмотрим, почему твой ответ неправильный.

В задании процедура F вызывается с аргументом 280. Процедура выводит символ *, а затем проверяет значение аргумента. Если оно больше или равно 1, то процедура вызывает себя дважды: с аргументами n-1 и n//3. Затем процедура выводит ещё один символ *.

Таким образом, каждый раз, когда вызывается процедура F, она выводит 3 символа *. Значит, если процедура вызывается с аргументом 280, то она выведет символ * три раза, затем сделает рекурсивные вызовы и снова выведет символ * три раза, и так далее.

Чтобы выяснить количество символов *, которое выведет процедура F(280), нам необходимо посчитать, сколько раз будет вызвана каждая рекурсивная ветвь.

Каждый раз, когда процедура вызывается с аргументом n-1, она сокращает значение аргумента на 1. В нашем случае аргумент равен 280, поэтому эта ветвь будет вызываться 280 раз.

Каждый раз, когда процедура вызывается с аргументом n//3, она сокращает значение аргумента в 3 раза без остатка. То есть, если аргумент равен 280, то эта ветвь будет вызываться 93 раза.

В итоге, суммируя количество вызовов каждой ветви, получим общее количество символов *, которые выведет процедура 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 вызывается с аргументом 280. Процедура выводит символ *, а затем проверяет значение аргумента. Если оно больше или равно 1, то процедура вызывает себя дважды: с аргументами n-1 и n//3. Затем процедура выводит ещё один символ *. Таким образом, каждый раз, когда вызывается процедура F, она выводит 3 символа *. Значит, если процедура вызывается с аргументом 280, то она выведет символ * три раза, затем сделает рекурсивные вызовы и снова выведет символ * три раза, и так далее. Чтобы выяснить количество символов *, которое выведет процедура F(280), нам необходимо посчитать, сколько раз будет вызвана каждая рекурсивная ветвь. Каждый раз, когда процедура вызывается с аргументом n-1, она сокращает значение аргумента на 1. В нашем случае аргумент равен 280, поэтому эта ветвь будет вызываться 280 раз. Каждый раз, когда процедура вызывается с аргументом n//3, она сокращает значение аргумента в 3 раза без остатка. То есть, если аргумент равен 280, то эта ветвь будет вызываться 93 раза. В итоге, суммируя количество вызовов каждой ветви, получим общее количество символов *, которые выведет процедура F(280). Правильный ответ - 2468785. Оцени мой ответ лайком или дизлайком.