Edição didática em português. O código e suas saídas preservam o original.
Protótipos e recursão em C
Declare funções antes de usá-las e entenda como modificar dados por ponteiros.

Um protótipo estabelece o tipo de retorno e os parâmetros. A definição deve corresponder a ele. Os argumentos são copiados: modificar um parâmetro comum não altera a variável do chamador.
Para trocar dois valores do chamador, passe seus endereços e escreva por ponteiros válidos. A expressão «passagem por referência» costuma descrever essa técnica, mas o mecanismo da linguagem continua sendo passagem por valor do ponteiro.
Na recursão, defina primeiro o caso base e confira se cada chamada reduz o problema. Teste entradas pequenas e não esqueça o custo da pilha.
Código C
#include <stdio.h>
#include <stdlib.h>
// Function prototypes
unsigned long long factorial(unsigned int n);
void swap(int *a, int *b);
int add(int x, int y);
int main(void) {
int a = 15, b = 30;
printf("1. Sum function: %d + %d = %d\n", a, b, add(a, b));
printf("\n2. Pass-by-Reference Swap:\n");
printf(" Before swap: a = %d, b = %d\n", a, b);
swap(&a, &b);
printf(" After swap: a = %d, b = %d\n", a, b);
printf("\n3. Recursive Factorials:\n");
for (unsigned int i = 0; i <= 6; i++) {
printf(" %u! = %llu\n", i, factorial(i));
}
return EXIT_SUCCESS;
}
int add(int x, int y) {
return x + y;
}
void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
// Recursive factorial with base case
unsigned long long factorial(unsigned int n) {
if (n <= 1) {
return 1; // Base case
}
return (unsigned long long)n * factorial(n - 1); // Recursive step
}Abrir no compiladorSaída esperada
1. Sum function: 15 + 30 = 45 2. Pass-by-Reference Swap: Before swap: a = 15, b = 30 After swap: a = 30, b = 15 3. Recursive Factorials: 0! = 1 1! = 1 2! = 2 3! = 6 4! = 24 5! = 120 6! = 720
Perguntas frequentes
Por que o código e a saída continuam em inglês?
Palavras-chave, identificadores e textos verificados pelos testes são preservados para não alterar o programa. As explicações e os controles estão traduzidos.