PUERTA | PUERTA CS 2011 | Pregunta 49

Considere la misma función C recursiva que toma dos argumentos

unsigned int foo(unsigned int n, unsigned int r) {
  if (n  > 0) return (n%r +  foo (n/r, r ));
  else return 0;
}

¿Cuál es el valor de retorno de la función foo cuando se llama como foo(513, 2)?
(A) 9
(B) 8
(C) 5
(D) 2

Respuesta: (D)
Explicación: foo(513, 2) devolverá 1 + foo(256, 2). Todas las llamadas recursivas posteriores (incluida foo(256, 2)) devolverán 0 + foo(n/2, 2) excepto la última llamada foo(1, 2) . La última llamada foo(1, 2) devuelve 1. Entonces, el valor devuelto por foo(513, 2) es 1 + 0 + 0…. + 0 + 1.
La función foo(n, 2) básicamente devuelve la suma de bits (o el recuento de bits establecidos) en el número n.
Cuestionario de esta pregunta

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *