Já sabemos que é legal um método invocar o outro método, e vimos vários exemplos destes. Mas também é legal um método invocar ele mesmo. Pode não ser óbvio o por que é isto é necessário, mas acaba por ser uma das coisas mais interessantes que um programa pode fazer e este tipo de técnica é chamada de recursão.
Recursão é o processo de repetir itens de uma forma auto similar. Por exemplo, quando as superfícies dos dois espelhos são exatamente paralela uma com a outra as imagens que ocorrem aninhadas são uma forma de recursividade infinita. O termo tem uma variedade de significados específicos para uma variedade de disciplinas que vão desde a lógica linguística. A aplicação mais comum da recursividade é em matemática e ciência da computação, no que se refere a um método de definição de funções em que a função a ser definida é aplicada dentro de sua própria definição.
Mas é preciso planejar bem as recursões pois se houver erros em sua lógica, assim como os laços as recursões também podem ser infinitas.
Exemplo:
Neste exemplo vamos programar uma contagem regressiva utilizando um método recursivo.
Java
public class Recursiva
{
static void contagemRegressiva (int n )
{
if ( n == 0 )
{
System.out.println("Explosão!!!");
}
else
{
System.out.println(n);
contagemRegressiva (n-1);
}
}
public static void main(String[] args)
{
int contagem = 10;
System.out.println("Iniciando contage regressiva");
contagemRegressiva(contagem);
}
}
C++
#include "stdafx.h"
#include <iostream>
using namespace std;
static void contagemRegressiva(int n)
{
if (n == 0)
{
cout << "Explosão!!!" << endl;
}
else
{
cout << n << endl; contagemRegressiva(n - 1);
}
}
int _tmain(int argc, _TCHAR* argv[])
{
int contagem = 10;
cout << "Iniciando contagem regressiva." << endl;
contagemRegressiva(contagem);
system("pause");
return 0;
}
C#
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DesenvolvimentoAberto
{
class Program
{
static void contagemRegressiva (int n )
{
if ( n == 0 )
{
Console.WriteLine("Explosão!!!");
}
else
{
Console.WriteLine(n);
contagemRegressiva (n-1);
}
}
static void Main(string[] args)
{
int contagem = 10;
Console.WriteLine("Iniciando contagem regressiva");
contagemRegressiva(contagem);
Console.ReadKey();
}
}
}
Python
#!/usr/bin/env python
# -*- coding: latin-1 -*-
# Desenvolvimento Aberto
# recursivo.py
# Importa OS
import os
# Limpa a tela
os.system("clear")
def ContagemRegressiva (n):
if (n==0):
print"Explosão!!!"
else:
print n
ContagemRegressiva(n-1)
contagem = 10
print "Inciando contagem regressiva"
ContagemRegressiva (contagem)
raw_input()
Abap
*&---------------------------------------------------------------------*
*& Report ZRECURSIVO
*&
*&---------------------------------------------------------------------*
*& Desenvolvimento Aberto
*& Metodos Recursivos
*&---------------------------------------------------------------------*
REPORT ZRECURSIVO.
PARAMETERS :CONTAGEM TYPE i.
WRITE : / 'Iniciando contage regressiva.'.
PERFORM CONTAGEM_REGRESSIVA USING CONTAGEM.
FORM CONTAGEM_REGRESSIVA USING N TYPE i.
IF ( N EQ 0 ).
WRITE : / 'Explosão!!!'.
ELSE.
WRITE : / N.
N = N - 1.
PERFORM CONTAGEM_REGRESSIVA USING N.
ENDIF.
ENDFORM.

