Open Source Your Knowledge, Become a Contributor
Technology knowledge has to be shared and made accessible for free. Join the movement.
Funções Recursivas
- A recursão é uma técnica que define um problema em termos de uma ou mais versões menores deste mesmo problema.
- A recursão pode ser utilizada sempre que for possível expressar a solução de um problema em função do próprio problema.
- Uma função é dita recursiva quando dentro do seu código existe uma chamada para si mesma. Por Exemplo: Calcular o Fatorial de um número N inteiro qualquer. Se formos analisar a forma de cálculo temos:
Logo, temos que:
fat(5) = 5 x fat(4)
fat(4) = 4 x fat(3)
fat(3) = 3 x fat(2)
fat(2) = 2 x fat(1)
fat(1) = 1 x fat(0)
fat(0) = 1
A seguir, um exemplo da função fatorial com e sem recursão (modifique o valor de num e execute novamente):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include<stdio.h>
int fatorialrec(int num)
{
if (num == 0) {
return 1;
}
else {
return num * fatorialrec(num-1);
}
}
int fatorialsemrec(int num)
{
int f, i;
if (num == 0) {
return 1;
}
else {
f = 1;
for(i= num; i > 1; i--){
f = f * i;
}
return f;
}
}
int main() {
int num;
num = 5;
printf("\nfatR(%d) = %d", num, fatorialrec(num));
printf("\n\nfatS(%d) = %d", num, fatorialsemrec(num));
}
Enter to Rename, Shift+Enter to Preview
Exercício
Faça um programa em C para calcular a soma dos n primeiros números dados pelo usuário na entrada. Criar duas funções soma (uma recursiva e a outra não recursiva) que recebe como parâmetro de entrada o número lido.
Lembre-se:
IDE
1
2
3
4
5
Para exibição do IDE, selecione a tecla <RUN> abaixo.
Digite sua solução no editor e execute.
Caso acha entrada de dados (scanf) no programa, digitar o(s) valor(es) na janela "Input" (um valor por linha).
Atenção: O editor não salva o seu programa.
Enter to Rename, Shift+Enter to Preview
Solução
#include<stdio.h>
int somasem (int n)
{
int s,i;
s = 0;
for(i=1; i <= n; i++){
s = s + i;
}
return s;
}
int somacom(int num)
{
if (num == 1) {
return 1;
}
else {
return num + somacom(num-1);
}
}
int main() {
int num;
printf("\ndigite o numero:");
scanf("%d", &num);
printf("\n\nsomasem(%d) = %d", num, somasem(num));
printf("\nsomacom(%d) = %d", num, somacom(num));
}
Open Source Your Knowledge: become a Contributor and help others learn. Create New Content