Funções Recursivas by Aquiles Burlamaqui Construção de Algoritmos Funções Recursivas Definição Elementos Exemplos Exercícios em Sala T8: Torre de Hanoi Funções Recursivas Uma função recursiva é uma função que se refere a si própria. A ideia consiste em utilizar a própria função que estamos a definir na sua definição. Funções Recursivas Em todas as funções recursivas existe: Um passo básico (ou mais) cujo resultado é imediatamente conhecido. Um passo recursivo em que se tenta resolver um sub-problema do problema inicial. Funções Recursivas #include <stdio.h> int fatorial( int n ) { int i,p; p = 1; for( i=2; i<=n; i++ ) p = p * i; return p; } Funções Recursivas #include <stdio.h> int main(){ unsigned int numero; printf("\nEntre com um numero positivo."); scanf("%u", &numero); printf("O fatorial de %u vale %u.", numero, factorial(numero)); getch(); } unsigned int fatorial (unsigned int num){ unsigned int fato; if (num == 1) return (1); else fato = num * fat (num-1); return fato; } Funções Recursivas factorial(6) 6 * factorial(5) 6 * 5 * factorial(4) 6 * 5 * 4 * factorial(3) 6 * 5 * 4 * 3 * factorial(2) 6 * 5 * 4 * 3 * 2 * factorial(1) 6 * 5 * 4 * 3 * 2 * 1 * factorial(0) 6*5*4*3*2*1*1 6*5*4*3*2*1 6*5*4*3*2 6*5*4*6 6 * 5 * 24 6 * 120 720 Funções Recursivas Fibonacci 2 fib(1) = 1 fib(2) = 1 fib(n) = fib(n-1) + fib(n-2), para n > Funções Recursivas // calcula o n-ésimo número de Fibonacci. int fib( int n ) { if( n==1 || n==2 ) return 1; else return fib(n-1) + fib(n-2); } Funções Recursivas Recursão versus Iteração Quando usar um ou outro? Recursão Percurso de uma árvore; Função de Ackermann Algoritmos de divisão e conquista(Quicksort, etc) Funções Recursivas Linguagens de programação modernas o espaço disponível para o fluxo de controle é geralmente bem menor que o espaço disponível na heap; Programa na Memória Funções Recursivas T8: Construir um programa que implemente o jogo Torre de Hanoi( para n discos), permitindo que o usuário tente resolvé-lo como também permita que ele peça a resposta ao computador, e o computador exiba tal resposta visualmente.