Métodos Recursivos – Recursion – Java, C++, C#, Python e Abap

Publicado: 28 de fevereiro de 2014 em Abap, C#, C/C++, Java, Python

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.
Publicidade

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s