Faça um traço de fatorial (n!) no papel: expanda fact(5) até fact(1)
Confirme que sempre existe um caso-base
Comece com profundidades pequenas (3 a 5)
Note que a mesma lógica pode ser escrita de forma iterativa — tente escrever as duas versões
💡 Dica: 90% dos bugs de recursão se resumem a um caso-base ausente ou inalcançável, ou a esquecer de diminuir o argumento. Verifique isso primeiro.
Funções com valores de retorno
Uma função recebe parâmetros, faz uma computação e pode retornar um valor para quem a chamou.
intsquare(int n) { // return type: intreturn n * n; // return a value
}
intmain(void) {
int r = square(5); // call the function; r becomes 25printf("%d\n", r);
}
Argumento
O valor passado para a função. Vai dentro dos parênteses.
Valor de retorno
O resultado que a função devolve, via instrução return.
nome(args)
Uma expressão de chamada. Seu valor é o que a função retornar.
void — "nada"
Use void para indicar "sem parâmetros" ou "sem valor de retorno".
// no return, no parametersvoidsayHello(void) {
printf("Hello!\n"); // return can be omitted
}
// no return, with parametervoidprintBox(int n) {
for(int i=0; i<n; i++) printf("*");
printf("\n");
}
// returns a value, no parametersintgetAnswer(void) {
return42;
}
A função main:int main(void) significa "sem parâmetros, retorna um int".
Múltiplos parâmetros e tipos
Você pode passar vários parâmetros separados por vírgulas. Cada um precisa da sua própria declaração de tipo.