Мне сказали выяснить количество раз, которое оператор foo
работает в следующей программе. Мы предполагаем, что n
- четное число.Поиск количества раз, когда выполняется оператор
j = 1;
while(j <= n/2)
{
i = 1;
while(i <= j)
{
foo;
i++;
}
j++;
}
Я понял, что лучший способ пойти по этому поводу - это начать с внутреннего цикла и работать по внешнему пути. Мы знаем, что i = 1
и внутри внутреннего цикла имеем i <= j
. Это означает, что этот внутренний цикл работает j
раз. (Здесь я начинаю запутываться). В внешнем цикле мы видим утверждение j <= n/2
, так что это означает, что этот внешний цикл работает n/2
раз, правильно? чтобы подсчитать количество раз foo
работает, было бы j
раз n/2
, не так ли? Итак, foo
работает j * (n/2)
раз? Это верно?
Ну, 'j' установлен, поэтому ваш результат должен быть функцией только 'n'. –
Работайте с ним для различных значений n (начиная с 2) и посмотрите, можете ли вы определить шаблон. Подсказка: вы когда-нибудь играли в боулинг? –
Хорошо, я пытаюсь пройти через него, начиная с 2. Когда 'n = 2', то это означает, что оператор' j <= n/2' проверяет, является ли 'j <= 1' истинным, так как' j' инициализируется значением '1'. Затем мы переходим во внутренний цикл и видим, является ли 'i <= j'' '' '' '' '' '' '' '' '' '' '' '' '' '. Итак, 'foo' запускается один раз, а затем' i' увеличивается. Теперь, 'i = 2', и мы проверяем, есть ли' i <= j', который теперь является 'false', и мы выходим из этого цикла, а' j' увеличивается. Затем вернемся к вершине, чтобы увидеть, является ли 'j <= n/2', который теперь является« ложным », и цикл завершается. Поэтому, когда программа равна 2, она запускается один раз. – GenericUser01