Online C Compiler
Abrir no compilador

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.

Abrir no compilador

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 compilador

Saí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.