Puedo decirte cuál yo usaría y por qué razones, sin embargo, creo que habrá tantas opiniones como miembros de la comunidad aquí ...
1) Ninguno. Yo escribiría:
long int multiplyNumbers(int n)
{
if (n < 1) {
return 1;
}
return n*multiplyNumbers(n-1);
}
Esto se debe a que me gusta la idea de "salida anticipada" en los casos especiales, y esto me recuerda ese escenario. La regla general es: si necesita manejar un caso especial o un caso general, primero maneje el caso especial. Es de suponer que el caso especial (por ejemplo, un error o una condición de límite) se manejará rápidamente y el resto del código aún no está demasiado lejos de la condición 'if', por lo que no puede omitir algunas líneas de código para examinarlo. También facilita la lectura del manejo del caso general, ya que solo tiene que desplazarse hacia abajo en el cuerpo de la función.
En otras palabras, en lugar de:
void foo(int bar)
{
if (!special_case_1) {
if (!special_case_2) {
return handle_general_case();
}
else {
return handle_special_case_2();
}
}
else {
return handle_special_case_1();
}
}
Estoy abogando por escribir esto:
int foo(int bar)
{
if (special_case_1) {
return handle_special_case_1();
}
if (special_case_2) {
return handle_special_case_2();
}
return handle_general_case();
}
Se dará cuenta de que, si es posible, prefiero no introducir una variable adicional 'resultado' aquí, principalmente porque entonces no tengo que preocuparme de si se inicializa o no. (Si lo introduce, entonces lo inicializa en la parte superior, solo para sobrescribirlo en cada rama, o no lo hace, y luego puede olvidarse de inicializarlo en alguna rama. Además, incluso si lo inicializa en cada rama, su analizador de código estático puede no ver esto y puede quejarse sin razón.)
2) Yo usaría (b) (con la declaración de 'resultado' tirada). Esto se debe a que, en este caso, no puedo decir que num1 < num2 o num1 > = num2 es un caso especial. Son iguales a mis ojos y por lo tanto (b) se prefiere a (c). (Ya expliqué por qué, en este caso, no introduciría una variable adicional, por lo que (a) en mis ojos es inferior a (b).)