Recursão e call stack
Toda função recursiva precisa de base case e progresso.
O que é Recursão e call stack?
Toda função recursiva precisa de base case e progresso.
Resolva problema por instância menor.
Pontos importantes
- Teste entradas vazias, únicas, duplicadas e ordenadas.
- Separe correção de otimização.
- Prefira a biblioteca padrão em produção.
Exemplos de código C e C++
main.c
#include <stdio.h>
unsigned long long factorial(unsigned number) {
return number < 2 ? 1 : number * factorial(number - 1);
}
int main(void) {
printf("%llu\n", factorial(6));
}
720
C++
main.cpp
#include <iostream>
constexpr unsigned long long factorial(unsigned number) {
return number < 2 ? 1 : number * factorial(number - 1);
}
int main() {
constexpr auto value = factorial(6);
std::cout << value << '\n';
}
720
Comparação entre C e C++
Fatorial usa O(n) tempo e O(n) stack; entradas grandes exigem validação e frequentemente solução iterativa.
C
Loops, ponteiros, tamanhos e buffers são explícitos.
C++
Iteradores e algoritmos separam operação e armazenamento.
Exercícios práticos
Execute as duas versões e modifique-as para observar suas garantias.
- Rastreie cada comparação.
- Teste duplicatas e valores extremos.
- Compare com a biblioteca padrão.