Nesta aula vamos aprender como calcular o somatório de 1 até n com recursão. Este é um exercício bem simples quando resolvido sem recursão, bastando uma repetição de 1 até n somando esses valores. Vamos então resolver este somatório de 1 até n com uma função recursiva?
Como já vimos nas aulas anteriores, encontrar o ponto de parada ou o caso base é fundamental em qualquer recursão e neste caso não poderia ser diferente.
A sequência que queremos somar é crescente (1 até n) mas não precisamos iniciar a soma em 1. Fazer isso vai tornar nosso processo de parada mais complicado. Podemos iniciar a soma em n e ir decrementando o valor a ser somado. Dessa forma podemos usar o 0 como nosso ponto de parada, afinal zero é zero!
Seguindo estes passos nossa função recursiva se torna muito simples. Se for zero, então retornamos zero. Caso contrário, retornamos n mais o retornado na chamada recursiva de n – 1, assim:
int soma(int n){ if(n == 0) return 0; else return n + soma(n - 1); }
Lembra da pilha de recursão? Imagine que o usuário digite o valor 5. Como 5 é diferente de zero, então teremos nossa primeira chamada recursiva empilhando o valor de n.
pilha -> 5 + soma(4)
Como 4 também é diferente de zero, novamente teremos outro empilhamento com outra chamada recursiva. Isso irá se repetir até n chegar a zero. Nosso pilha ficará assim:
pilha -> 1 + soma(0)
pilha -> 2 + soma(1)
pilha -> 3 + soma(2)
pilha -> 4 + soma(3)
pilha -> 5 + soma(4)
Ao fazer a última chamada recursiva, com n = 0, não teremos novas chamadas recursivas e é retornado o valor 0. Esse valor é retornado exatamente para o ponto onde foi feita a chamada recursiva com n = 0 e o computador começa então o processo de desempilhar.
pilha -> 1 + 0
pilha -> 2 + soma(1)
pilha -> 3 + soma(2)
pilha -> 4 + soma(3)
pilha -> 5 + soma(4)
Como agora o computador já conhece os dois valores envolvidos na soma, a operação é realizada e novamente o resultado é retornado para o ponto onde foi feito a chamada com n = 1.
pilha -> 2 + 1
pilha -> 3 + soma(2)
pilha -> 4 + soma(3)
pilha -> 5 + soma(4)
Novamente a soma é realizada e o resultado retornado.
pilha -> 3 + 3
pilha -> 4 + soma(3)
pilha -> 5 + soma(4)
Esse processo irá se repetir até realizar a última operação.
pilha -> 5 + 10
Quando a última operação é realizada, o resultado é retornado para o ponto onde foi feita a chamada à função, no nosso exemplo, dentro de um printf na função main, imprimindo assim o resultado na tela.
Código C recursivo para calcular o somatório
#include <stdio.h> #include <stdlib.h> /* Aula 160: Desenvolva uma função recursivo que calcule a soma dos números inteiros de 1 a N. Escrita por Wagner Gaspar Março de 2021 */ int soma(int n){ if(n == 0) return 0; else return n + soma(n - 1); } int main () { int n; printf("Digite N: "); scanf("%d", &n); printf("Soma de 1 ate %d: %d\n", n, soma(n)); return 0; }