Manual

do

Maker

.

com

Desafio Maker 06: Solução - função recursiva em C++

Desafio Maker 06: Solução - função recursiva em C++

Como citado no [Desafio Maker 06](https://www.manualdomaker.com/article/desafio-maker-06-incrementar-um-valor-ate-n/(abrir em uma nova aba)), a solução poderia ser em C ou C++, mas de C++ tem mesmo só o namespace e a biblioteca - isso porque fiz no laptop. E a solução é simples: função recursiva em C++. Se não lembrou ou não conhecia, aproveite os próximos parágrafos que precedem a solução.

O que é uma função recursiva?

Uma função recursiva pode ser feita em qualquer linguagem, até shell script. O que ela faz é chamar a si mesma até que uma determinada condição ocorra.

Depende muito do que se vai fazer, a função recursiva pode economizar umas linhas de código e trazer um toque especial ao programa, mas particularmente não vejo como um recurso que possa ser utilizado o tempo inteiro - até porque funções recursivas precisam ser bem planejadas. Não é o caso desse desafio, que propõe um mero incremento, mas se utilizada com uma estrutura complexa, pode vir a ser um problema de diversas maneiras.

Cuidado ao usar funções recursivas

Se executamos uma função, ela permanecerá em execução até que finalize. O que acontece se chamarmos uma função recursiva sem retorno? Bem, como podemos ver na imagem abaixo, é uma catástrofe.

Fiz esse exemplo no QtCreator porque estou acostumado a depurar código nele, mas é uma função recursiva em C++, não estou usando nada do Qt:

function-recursive-bad.webp

Repare na janela de encaixe do rodapé que a função foi se chamando recursivamente sem finalizar, uma após a outra, gerando uma cascata. Não é problema para um função vazia que só faz um incremento em um inteiro, mas imagine uma série de processamentos e variáveis sendo manipuladas durante cada execução recursiva. Podemos exaurir os recursos do dispositivo, principalmente sendo uma MCU. Existem outras implicações conforme o código que estive dentro da função, mas não vou me estender, só queria deixar claro que do jeito que está escrito esse exemplo é divertido, mas não recomendado para coisas em que se pretenda evitar problemas.

Código da função recursiva em C++

O código para testar no laptop ou no Raspberry é esse:

#include <iostream>

using namespace std;
int acum = 0;

void increase(int &value){
    if (value < 10){
        cout << "mais um..." << endl;
        value += 1;
        increase(value);
    }
}
int main(){
    increase(acum);
    cout << acum << endl;
    return 0;
}

Se fosse feito em um sketch para Arduino eu não conseguiria mostrar a recursividade, mas agora que está pronto é só colocar essa função antes de setup() e em setup() colocar as duas linhas que precedem o return, substituindo cout por Serial.println(acum).

Se gostou do QtCreator, saiba que com ele podemos programar em C++ sem usar o framework, vale a pena conhecer. O QtCreator faz parte do pacote Qt, ou se estiver usando Linux, tem a opção de instalá-lo pelas ferramentas de gerenciamento de pacotes de sua distribuição.

E ai, resolveu fácil? Fez uma função recursiva melhor? Comente lá no facebook!

Autor: Djames Suhanko

Revisão: Ricardo Amaral de Andrade

Inscreva-se no nosso canal Manual do Maker no YouTube.

Também estamos no Instagram.

Nome do Autor

Djames Suhanko

Autor do blog "Do bit Ao Byte / Manual do Maker".

Viciado em embarcados desde 2006.
LinuxUser 158.760, desde 1997.