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