A recursividade pode ser usada para resolver problemas cuja soluo tentar todas as alternativas possveis. A idia para algoritmos tentativa e erro decompor o problema em um nmero finitos de sub-tarefas parciais que devem ser exploradas exaustivamente. Isso significa que devemos testar todas as possibilidades de resultados em um problema fim de descobrir qual o melhor resultado para esse. Costumam ser algoritmos com uma implementao simples, porm com uma complexidade geralmente elevada. Exemplo: Passeio de um cavalo no tabuleiro de xadrez Dado um tabuleiro com n x n posies, o cavalo movimenta-se segundo as regras do xadrez.
A partir da posio inicial (x 0 ,y 0 ), o problema consiste em encontrar, se existir, um passeio do valo com n 2 1 movimentos, tal que todos os pontos do tabuleiro so visitados uma nica vez. Um caminho para resolver o problema considerar a possibilidade de realizar o prximo movimento ou verificar que ele no possvel. Algoritmo Bsico
Um exemplo de uma soluo para o problema do passeio de um cavalo para o tabuleiro 8x8.
#include <stdio.h> int t[8][8],a[8],b[8]; void imprime(){ int i,j; for(i=0;i<8;i++){ for(j=0;j<8;j++){printf("%3d",t[i][j]);} printf("\n");} } int cavalo(int i, int x, int y){ int u,v,k,q; if(i==64){ imprime(); return 1;} //executa movimentos for(k=0;k<8;k++){ u = x + a[k]; v = y + b[k]; //testa limites do tabuleiro if( (u>=0 && u<=7) && (v>=0 && v<=7)){ if(t[u][v]==0){ t[u][v]=i; q = cavalo(i+1,u,v); if(q==0) t[u][v]=0; else return 1; } } } return 0; } int main(){ //inicializao dos deslocamentos dos movimentos a[0]=2;a[1]=1;a[2]=-1;a[3]=-2; b[0]=1;b[1]=2;b[2]=2;b[3]=1;