Рубрики

ВОРОТА | GATE CS 2011 | Вопрос 49

Рассмотрим ту же рекурсивную функцию C, которая принимает два аргумента

unsigned int foo(unsigned int n, unsigned int r) {

  if (n  > 0) return (n%r +  foo (n/r, r ));

  else return 0;

}

Каково возвращаемое значение функции foo, когда она вызывается как foo (513, 2)?
(А) 9
(Б) 8
(С) 5
(D) 2

Ответ: (D)
Объяснение: foo (513, 2) вернет 1 + foo (256, 2). Все последующие рекурсивные вызовы (включая foo (256, 2)) вернут 0 + foo (n / 2, 2), кроме последнего вызова foo (1, 2). Последний вызов foo (1, 2) возвращает 1. Итак, значение, возвращаемое foo (513, 2), равно 1 + 0 + 0…. + 0 + 1.
Функция foo (n, 2) в основном возвращает сумму битов (или количество установленных бит) в числе n.
Тест на этот вопрос

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

ВОРОТА | GATE CS 2011 | Вопрос 49

0.00 (0%) 0 votes