Рубрики

ВОРОТА | Gate IT 2007 | Вопрос 27

Функция f определяется следующим образом:

int f (int n) {

    if (n <= 1) return 1;

    else if (n % 2  ==  0) return f(n/2);

    else return f(3n - 1);

}

Предполагая, что произвольно большие целые числа могут быть переданы в качестве параметра функции, рассмотрим следующие утверждения.
1. Функция f завершается для конечного числа различных значений n ≥ 1.

II. Функция f завершается для бесконечного числа различных значений n ≥ 1.

III. Функция f не заканчивается для конечного числа различных значений n ≥ 1.

внутривенно Функция f не заканчивается для бесконечно многих различных значений n ≥ 1.

Какой из следующих вариантов является верным из вышеперечисленного?
(А) (i) и (iii)
(B) (i) и (iv)
(С) (ii) и (iii)
(D) (ii) и (iv)

Ответ: (D)
Объяснение: Функция завершается для всех значений, имеющих коэффициент 2 {(2.x) 2 == 0}
Итак, (i) ложно и (ii) ИСТИНА.
Пусть n = 3, он завершится во второй итерации.
Пусть n = 5, это пойдет как 5 — 14 — 7 — 20 — 10 — 5 — и теперь это будет повторяться.
И для любого числа с коэффициентом 5 и 2 возможны бесконечные рекурсии.
Таким образом, (iv) ИСТИНА и (iii) ложь.

Тест на этот вопрос

Рекомендуемые посты:

ВОРОТА | Gate IT 2007 | Вопрос 27

0.00 (0%) 0 votes