Problema: Crie uma função recursiva que calcule o somatório de 1 a n.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
#include <stdlib.h> #include <stdio.h> int soma(int n) { if (n == 0) return 0; else return n + soma(n-1); } int main(void) { int n; printf("Digite um inteiro positivo: "); scanf("%d", &n); printf("%d", soma(n)); return 0; } |
Este código em linguagem C implementa uma função “soma” que calcula a soma dos n primeiros números naturais, onde n é um valor inteiro positivo passado como argumento. A função é implementada com recursão, onde a soma é calculada adicionando o próximo número natural ao resultado da chamada da função com o número anterior até chegar em 0. No corpo principal do programa, o usuário é solicitado a digitar um inteiro positivo, que é passado como argumento para a função “soma”. O resultado da soma é exibido na tela.
—
Outra versão:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
#include <stdio.h> #include <stdlib.h> int somar(int n) { return (n == 0) ? 0 : n + somar(n-1); } int main(void) { int num; printf("Digite um número inteiro positivo: "); scanf("%d", &num); printf("A soma dos números até %d é: %d\n", num, somar(num)); return 0; } |
A função “soma” recebe um argumento “n”, que é um inteiro positivo. Se “n” for igual a zero, a função retorna zero. Caso contrário, a função retorna “n” mais a soma da chamada recursiva de “soma” com o argumento “n-1”. Esta chamada recursiva é repetida até que o argumento “n” seja zero. O resultado de todas as chamadas recursivas é acumulado e retornado como a soma dos n primeiros números inteiros positivos.
Na função main, o usuário é solicitado a digitar um inteiro positivo e esse valor é armazenado na variável “n”. Em seguida, a função “soma” é chamada com o argumento “n” e o resultado é exibido na tela.
—
O que é recursividade?
A recursão é uma técnica de programação na qual uma função faz uma chamada a si mesma para resolver uma tarefa. A recursão requer a existência de uma condição base, que é uma condição necessária para que a recursão pare, caso contrário, a função recursiva entrará em loop infinito. Além disso, cada chamada recursiva deve levar a uma progressão para a condição base, de modo que eventualmente a recursão será interrompida.
*Atualizado em 30 de janeiro de 2023