Você está na página 1de 21

CONSULTA ESTRUTURA DE DADOS

Aula 1 – Introdução
Algoritmo é comumente definido como uma sequência finita de etapas lógicas e
sequenciais que visam atingir um objetivo definido.
A linguagem de programação C++ foi desenvolvida em meados de 1983
(originalmente com o nome C with classes) por Bjarne Stroustrup. É uma linguagem
orientada a objetos e considerada como de médio nível, pois oferece mecanismos
encontrados em linguagens de baixo e alto nível. A estrutura de um programa em C++
pode ser definida como uma coleção de objetos que se comunicam via chamadas de
seus métodos.
Cabeçalhos contém informações ou recursos que são necessários ou úteis ao
programa. No programa anterior, o cabeçalho iostream é necessário;
• A linha using namescape std; informa ao compilador que a área de nomes chamada
std será utilizada. Através dela é possível acessar o objeto cout;
• int main() denota o método principal. A partir dele que a aplicação inicia sua
execução;
• A última linha return 0; concluirá o método main() retornando um código de status.
Tipos de dados
Bool - Tipo booleano, que assume apenas os valores true ou false. char Caractere
representado por um octeto de bits (1 byte) ASCII. É um tipo de int.
Int - Número inteiro, cujo tamanho pode variar conforme a arquitetura do processador.
Float - Número em ponto flutuante de precisão simples.
Double - Igualmente ao float, porém com precisão dupla.
Void - Representa a absência de tipo (não é utilizado para declarar variáveis).
Wchar_t - Armazena caracteres mais amplos para suportar internacionalização.
Existem quatro modificadores que podem ser combinados com os tipos primitivos char,
int e double, são eles:
• short: indica uma variável com range menor (aplicável a int);
• long: indica uma variável com range maior (aplicável a int e double);
• signed: indica um número que pode ser negativo ou positivo (aplicável a int e char);
• unsigned: indica que um número só pode ser positivo (aplicável a int e char).
Exemplo:
unsigned short int var1; //Aceita valores entre 0 a 65.535.
long double var2; //Possui 10 dígitos de precisão, contra 8 do double convencional.
signed char var3; //Varia entre -127 a 127, igualmente ao char convencional.
long int var4; //Aceita valores entre -2.147.483.648 a 2.147.483.647.
Se o fluxo de bytes tem origem em um teclado, um disco rígido ou uma conexão de
rede e tem destino para a memória principal do computador, é uma operação de
entrada.
Se os bytes estão alocados na memória principal e têm como destino um monitor de
vídeo, uma impressora ou uma conexão de rede, é uma operação de saída.
As operações de entrada e saída realizadas através de cout e cin, que são instâncias
das classes ostream e istream. Para utilizá-las, é necessário incluir o arquivo header
iostream e explicitar o uso da área de nomes chamada std.
Blocos condicionais: São estruturas que envolvem o teste condicional de uma
expressão, de tal forma que se a condição for satisfeita, uma determinada tarefa será
executada, caso contrário, uma outra tarefa poderá ser realizada.
IF: Executa um bloco de código caso a condição booleana a ser testada retornar true,
exemplo:
int main() { int n = 10;
if (n < 20) {
cout << "n e menor que 20" << endl; }
cout << "Valor de n: " << n << endl;
return 0; }
IF...ELSE: Executa um bloco de código caso a condição booleana a ser testada
retornar true. Se for falsa, executa outro bloco de código, exemplo:
int main() { int n = 10;
if (n < 20) {
cout << "n e menor que 20" << endl; }
else {
cout << "n nao e menor que 20" << endl; }
cout << "Valor de n: " << n << endl;
return 0; }
IF TERNÁRIO: O comando IF...ELSE pode ser escrito como um IF ternário em
condições onde haja uma atribuição de variável, exemplo:
int main() { int n;
char c = 'A';
//Atribui à variável n o valor 10 se c for igual a A
//Caso contrário, o valor de n será igual a 20
n = (c == 'A' ? 10 : 20);
return 0; }
IF...ELSE IF...ELSE: Executa um bloco de código caso a sua condição correspondente
retornar true. O uso de else nesta estrutura é opcional.
int main() { int n = 10;
if (n < 20) {
cout << "n e menor que 20" << endl; }
else if (n < 30) {
cout << "n e menor que 30" << endl; }
else {
cout << "n nao e menor que 20 e nem 30" << endl; }
cout << "Valor de n: " << n << endl;
return 0; }
SWITCH: Esta estrutura testa uma variável a partir de uma lista de valores, sendo que
cada valor é conhecido como case. Se a variável for igual a algum valor, o comando
switch irá executar o bloco de código correspondente ao case. Exemplo:
int main() { int n = 10;
switch (n) {
case 10:
cout << "O valor e 10" << endl;
break;
case 20:
cout << "O valor e 20" << endl;
break;
default: cout << "Valor nao e 10 e nem 20" << endl; }
return 0; }
O comando switch pode ser comparado com uma estrutura IF...ELSEIF...ELSE, porém
é importante frisar os seus pontos peculiares:
• A variável a ser testada deve ser um tipo inteiro ou enumerado;
• É possível inserir quantos casos forem necessários, onde a sintaxe deve conter a
palavra case e dois pontos;
• O deve ser do mesmo tipo da variável. Além disso deve ser necessariamente uma
constante ou um literal;
• O uso de break é opcional. Seu propósito é de interromper o fluxo de código,
forçando-o a executar a próxima linha de código depois do bloco switch;
• Um bloco switch pode ter um caso default, que é o equivalente ao else de uma
estrutura if, ou seja, é executado apenas quando todos os casos anteriores falharem.
Por ser o último caso, não há necessidade do comando break.
Blocos de repetição: Um bloco de repetição processará uma ou várias linhas de código
enquanto a condição booleana que a mantém retornar true. O diagrama ilustra a ideia
de um bloco de repetição:
WHILE :Processa um bloco de código repetidamente até que a sua condição retorne
true.
int main() { int n = 1;
while (n <= 10) {
cout << "O valor de n e " << n << endl; n++; }
return 0; }
A saída será a seguinte:
O valor de n e 1
O valor de n e 2
O valor de n e 3
O valor de n e 4
O valor de n e 5
O valor de n e 6
O valor de n e 7
O valor de n e 8
O valor de n e 9
O valor de n e 10
*a rotina irá incrementar o valor de n até que este chegue a 11. Quando isso
acontecer, a condição no laço while retornará false (pois 11 não é menor e nem igual a
10) e, consequentemente, o bloco de repetição se encerrará.
FOR : Permite controlar de forma mais eficiente a quantidade de iterações a ser
realizada,
int main() { for (int n = 1; n <= 10; n++) {
cout << "O valor de n e " << n << endl; }
return 0; }
Este programa imprimirá o mesmo resultado do código do exemplo anterior. A
diferença está em relação ao controle da quantidade de iterações, que fica implícita no
próprio comando for.
DO...WHILE:Diferentemente dos casos anteriores, onde o teste da condição é
realizado primeiro, neste tipo de bloco de repetição a condição é verificada somente
ao fim do bloco. A
diferença principal é que o código será executado pelo menos uma vez, conforme
exemplo abaixo (cuja saída será igual aos dois códigos anteriores).
int main() { int n = 1;
do {
cout << "O valor de n e " << n << endl; n++; }
while (n <= 10);
return 0; }
setlocale(LC_CTYPE, "portuguese_brazil"); - Informa ao programa as regras do
idioma do brasil
ATIVIDADES 1
1. Crie um programa que solicite ao usuário os três coeficientes de uma equação do
segundo grau e informe os valores de x’ e x’’.
int main(int argc, char *argv[])
{
int a, b, c;
float d, x1, x2;
cout<<"Digite 3 valores \n";
cin>>a>>b>>c;
d = (b*b) - (4*a*c);
if(d>0){
x1=-b + sqrt(d) / (2*a);
x2=-b - sqrt(d) / (2*a);
cout<< "As saidas sao x1= "<<x1<<" e x2= "<<x2<<"\n";
}
else if(d==0){
x1=-b/(2*a);
cout<<"A raiz "<<x1<<"\n";
}
else{
cout<<"Nao existe raiz\n";
}
system("PAUSE");
return EXIT_SUCCESS;
}
2. Crie um programa que solicite ao usuário os lados de um retângulo e informe a sua
área.
int main() {
float b, h;
//Lendo os atributos do retângulo (base e altura)
cout << "Informe a base do retangulo: ";
cin >> b;
if (b < 0) {
cout << endl << "Valor invalido para a base do retangulo!" << endl;
return 0;
}
cout << endl << "Informe a altura do retangulo: ";
cin >> h;
if (h < 0) {
cout << endl << "Valor invalido para a altura do retangulo!" << endl;
return 0;
}
//Calculando a área do retângulo (base x altura)
float area = b * h;
cout << endl << "Area do retangulo: " << area << endl;
return 0;
}
3. Crie um programa que solicite ao usuário os lados de um triângulo e informe a sua
área.
int main() {
float b, h;
//Lendo os atributos do triângulo (base e altura)
cout << "Informe a base do triangulo: ";
cin >> b;
if (b < 0) {
cout << endl << "Valor invalido para a base do triangulo!" << endl;
return 0;
}
cout << endl << "Informe a altura do triangulo: ";
cin >> h;
if (h < 0) {
cout << endl << "Valor invalido para a altura do triangulo!" << endl;
return 0;
}
//Calculando a área do triângulo (base x altura)
float area = (b * h) / 2;
cout << endl << "Area do triangulo: " << area << endl;
return 0;
}
4. Crie um programa que solicite ao usuário os lados de um trapézio e informe a sua
área.
int main() {
float b, B, h;
//Lendo os atributos do trapézio (base menor, base maior e altura)
cout << "Informe a base menor do trapezio: ";
cin >> b;
if (b < 0) {
cout << endl << "Valor invalido para a base menor do trapezio!" <<
endl;
return 0;
}
cout << endl << "Informe a base maior do trapezio: ";
cin >> B;
if (B < 0) {
cout << endl << "Valor invalido para a base maior do trapezio!" <<
endl;
return 0;
} else if (B < b) {
cout << endl << "A base maior e menor do que a base menor!" <<
endl;
return 0;
}
cout << endl << "Informe a altura do trapezio: ";
cin >> h;
if (h < 0) {
cout << endl << "Valor invalido para a altura do trapezio!" << endl;
return 0;
}
//Calculando a área do trapézio (((base maior + base menor) x altura) / 2)
float area = ((b + B) * h) / 2;
cout << endl << "Area do trapezio: " << area << endl;
return 0;
}
5. Escreva um programa que solicite ao usuário um valor inteiro e informe se esse
número é par ou ímpar.
int main() {
int numero;
cout << "Digite um numero: ";
cin >> numero;
cout << endl;
if (numero % 2 == 0) {
cout << "Numero " << numero << " e par" << endl;
} else {
cout << "Numero " << numero << " e impar" << endl;
}
return 0;
}
6. Escreva m programa que solicite ao usuário a idade de uma pessoa e informe se
essa pessoa é criança (0 a 11 anos), adolescente (12 a 17 anos), adulta (18 a 49
anos) ou idosa (a partir de 50 anos).
int main() {
int idade;
//Lendo a idade da pessoa
cout << "Digite a idade de uma pessoa: ";
cin >> idade;
//Idade negativa não é válida
if (idade < 0) {
cout << endl << "Idade invalida!" << endl;
return 0;
}
cout << endl;
//Verificando o intervalo de idade da pessoa
if (idade <= 11) {
cout << "A pessoa e uma crianca";
} else if (idade <= 17) {
cout << "A pessoa e adolescente";
} else if (idade <= 49) {
cout << "A pessoa e adulta";
} else {
cout << "A pessoa e idosa";
}
cout << endl;
return 0;
}
7. Escreva um programa que solicite ao usuário um ano qualquer e informe se esse
ano é bissexto. Um ano é considerado bissexto se ele for divisível por quatro, mas
não por 100. Ou então se ele for divisível por 400.
int main() {
int ano;
//Lendo o ano informado pelo usuário
cout << "Informe um ano: ";
cin >> ano;
//Validando o ano (não pode ser negativo)
if (ano < 0) {
cout << endl << "Ano invalido!" << endl;
return 0;
}
cout << endl;
//Verifica se o ano é divisível por 400
bool divisivelPor400 = (ano % 400 == 0);
//Verifica se o ano é divisível por 4 e não por 100
bool divisivelPor4 = (ano % 4 == 0 && ano % 100 != 0);
//Um ano é considerado bissexto se uma das duas condições acima for
verdadeira
if (divisivelPor400 || divisivelPor4) {
cout << "Ano " << ano << " e bissexto!";
} else {
cout << "Ano " << ano << " nao e bissexto!";
}
cout << endl;
return 0;
}
8. Crie um programa que solicite ao usuário os três ângulos de um triângulo e informe
se este é um triângulo equilátero, isósceles ou escaleno.
int main() {
int angulo1, angulo2, angulo3;
cout << "Digite o primeiro angulo de um triangulo: ";
cin >> angulo1;
if (angulo1 <= 0) {
cout << endl << "Angulo invalido!";
return 0;
}
cout << endl << "Digite o segundo angulo de um triangulo: ";
cin >> angulo2;
if (angulo2 <= 0) {
cout << endl << "Angulo invalido!";
return 0;
}
cout << endl << "Digite o terceiro angulo de um triangulo: ";
cin >> angulo3;
if (angulo3 <= 0) {
cout << endl << "Angulo invalido!";
return 0;
}
//Verificando se a soma dos ângulos do triângulo equivale a 180º. Se não
for, então a figura geométrica não é um triângulo
if ((angulo1 + angulo2 + angulo3) != 180) {
cout << endl << "A soma dos angulos internos de um triangulo
deve ser igual a 180!" << endl;
return 0;
}
cout << endl;
//Verificando os ângulos
if (angulo1 == angulo2 && angulo2 == angulo3) { //Todos os ângulos
iguais, então ele é equilátero
cout << "Este e um triangulo equilatero";
} else if (angulo1 == angulo2 || angulo2 == angulo3 || angulo1 == angulo3)
{ //Um par de ângulos igual, então é isósceles
cout << "Este e um triangulo isosceles";
} else { //Todos os ângulos são diferentes, então ele é escaleno
cout << "Este e um triangulo escaleno";
}
cout << endl;
return 0;
}
9. Escreva um programa que solicite ao usuário quatro números e mostre na tela o
maior, o menor e a média aritmética dos números digitados.
int main() {
float n1, n2, n3, n4;
float menor, maior, media;
//Lendo os quatro números do usuário
//A partir do segundo, faz-se comparações para verificar se o novo
número é
//menor ou maior que os anteriores
cout << "Digite o primeiro numero: ";
cin >> n1;
menor = n1;
maior = n1;
cout << endl << "Digite o segundo numero: ";
cin >> n2;
if (n2 < menor) {
menor = n2;
} else if (n2 > maior) {
maior = n2;
}
cout << endl << "Digite o terceiro numero: ";
cin >> n3;
if (n3 < menor) {
menor = n3;
} else if (n3 > maior) {
maior = n3;
}
cout << endl << "Digite o quarto numero: ";
cin >> n4;
if (n4 < menor) {
menor = n4;
} else if (n4 > maior) {
maior = n4;
}
//Calculando a média artimética
media = (n1 + n2 + n3 + n4) / 4;
//Exibindo os resultados
cout << endl << "Maior numero digitado: " << maior << endl;
cout << "Menor numero digitado: " << menor << endl;
cout << "Media artimetica dos numeros: " << media << endl;
return 0;
}
ATIVIDADES 2 – VETOR
VETOR É UMA VARIÁVEL COMPOSTA HOMOGÊNEA UNIDIMENSIONAL
FORMADA POR UMA SEQUÊNCIA DE VARIÁVEIS, TODAS DO MESMO TIPO, COM
O MESMO IDENTIFICADOR (MESMO NOME) E ALOCADAS SEQUENCIALMENTE
NA MEMÓRIA.
1-) Fazer um programa que leia vários números inteiros e positivos. A leitura se
encerra quando encontrar um número negativo ou quando o vetor ficar completo.
Sabe-se que o vetor possui, no máximo, 10 elementos. Gerar e imprimir um vetor onde
cada elemento é o inverso do correspondente do vetor original
int main(int argc, char *argv[])
{
int i,vet[10], x;
i=0;
do{
cout<<"Digite um número \n";
cin>>x;
if(x>0){
vet[i]=x;
i++;
}
}
while(i<10 && x>0);
for(int y=0; y<i; y++)
cout<<vet[y]*(-1)<<"\n";
system("PAUSE");
return EXIT_SUCCESS;
}
2-) Fazer um programa que digite vários números no vetor de tamanho máximo de 100
elementos, até digitar o número “0”. Imprimir quantos números iguais ao último número
foram lidos. O limite de números é 100. Sem considerar o “0” como último número.
int main(int argc, char *argv[])
{
int v[100], x, i, aux, c;
x=1;i=0; c=0;
while(x!=0 && i<100){
cout<<"Digite um número \n";
cin>>x;
if(x!=0){
v[i]=x;
i++;
}
}
for(int y=0; y<i-1; y++){
if(v[y]== v[i-1])
c++;
}
cout<<c<<"\n";
system("PAUSE");
return EXIT_SUCCESS;
}
MATRIZ
MATRIZ É UMA VARIÁVEL COMPOSTA HOMOGÊNEA BIDIMENSIONAL FORMADA
POR UMA SEQUÊNCIA DE VARIÁVEIS, TODAS DO MESMO TIPO, COM O MESMO
IDENTIFICADOR (MESMO NOME) E ALOCADAS SEQUENCIALMENTE NA
MEMÓRIA.
1-) Criar uma matriz de ordem 4 e exibir a soma da diagonal principal.
int main(int argc, char** argv) {
int matrizA[4][4];
int somaA=0;
int total;
for(int i= 0; i<4; i++){
for(int j= 0; j<4; j++){
cout << "Insira um valor na matriz " << i << " " << j << ": ";
cin>> matrizA[i][j];
if(i==j){
somaA += matrizA[i][j];
}
}
}
cout<< "Diagonal Principal: " << somaA<<endl;
return 0;
}
2-) Ler valores inteiros para a matriz A[3][5]. Gerar e imprimir o vetor Soma_Linha,
onde cada elemento é a soma dos elementos de uma linha da matriz A. Faça o trecho
que gera a matriz separadamente da entrada e saída.
int main(int argc, char** argv) {
int A[3][5];
int soma_Linha[3]={0,0,0};
for(int i= 0; i<3; i++){
for(int j= 0; j<5; j++){
cout << "Insira um valor na matriz " << i << " " << j << ": ";
cin>> A[i][j];
}
}
for(int i= 0; i<3; i++){
for(int j= 0; j<5; j++){
soma_Linha[i] += A[i][j];
}
}
for(int i= 0; i<3;i++){
cout << "Soma da linha "<< i<< ": " << soma_Linha[i] << "\n";
}
return 0;
}
3-) Criar uma matriz 2x3. Gerar e imprimir a transposta dessa matriz. A matriz
transposta é gerada trocando linha por coluna.
int main(int argc, char** argv) {
int A[3][5];
int soma_Linha[3]={0,0,0};
for(int i= 0; i<3; i++){
for(int j= 0; j<5; j++){
cout << "Insira um valor na matriz " << i << " " << j << ": ";
cin>> A[i][j];
}
}
for(int i= 0; i<3; i++){
for(int j= 0; j<5; j++){
soma_Linha[i] += A[i][j];
}
}
for(int i= 0; i<3;i++){
cout << "Soma da linha "<< i<< ": " << soma_Linha[i] << "\n";
}
return 0;
}
METODOS
UM MÉTODO É UMA SUB-ROTINA QUE É EXECUTADA POR UM OBJETO AO
RECEBER UMA MENSAGEM. OS MÉTODOS DETERMINAM O COMPORTAMENTO
DOS OBJETOS DE UMA CLASSE E SÃO ANÁLOGOS A FUNÇÕES OU
PROCEDIMENTOS DA PROGRAMAÇÃO ESTRUTURADA.

• TIPO DO MÉTODO – SERIA UM TIPO DE DADO (PODE SER OS TIPOS


CLÁSSICOS COMO INT, LONG, FLOAT ...) PORÉM PODEMOS TER UM
TIPO DIFERENTES DESSES, TIPO DE UMA CLASSE.
• NOME_DO_MÉTODO – NOME DADO AO MÉTODO, SEGUE AS MESMA
REGRA PARA A CRIAÇÃO DAS VARIÁVEIS.
• PARÂMETROS – SÃO DADOS QUE SERVEM PARA ENTRADA DA AÇÃO DO
MÉTODO.
• { - ABERTURA DO ESCOPO DO MÉTODO
• RETORNO – É USADO O COMANDO RETURN PARA RETORNAR A AÇÃO
DOS MÉTODOS, OU SEJA A SAÍDA/RESPOSTA DO MÉTODO, TEMOS
CASOS QUE NÃO USAMOS QUANDO O TIPO FOR VOID.
• } – FECHANDO O ESPOCO DO MÉTODO.
1- Desenvolva um programa que tenha dois métodos fahrenheit e celsius, onde você
entra com um valor em fahrenheit e transforma em celsius e vice e versa.
Fórmula Celsius: (fahrenheit – 32) * 5/9;
Fahrenheit = (Celsius * 9/5) + 32;
float calcCel (float f);
float calcFah (float c);
int main(int argc, char *argv[])
{
float Fahrenheit, Celsius;
int valor;
cout << "*** Converte Celsius para Fahrenheit e vice-versa ***\n";
cin >> valor;
if (valor == 1){
cout << "\nDigite os graus Fahrenheit: ";
cin >> Fahrenheit;
Celsius = calcCel (Fahrenheit);
cout << "\nGraus Celsius: "<< Celsius <<"\n";
}
else{
cout << "\nDigite os graus Celsius: ";
cin >> Celsius;
Fahrenheit = calcFah (Celsius);
cout << "Graus Fahrenheit: "<< Fahrenheit<<"\n";
}
system("PAUSE");
return EXIT_SUCCESS;
}
float calcCel (float f)
{
return (f - 32)/1.8;
}
float calcFah (float c)
{
return (c / 5 * 9 )+ 32;
}
2- Um número primo é qualquer inteiro divisível por si próprio e por 1. Escreva um
método que receba um inteiro positivo e, se este número for primo retorne 1, caso
contrário retorne 0.
bool primo(int x);
int main(int argc, char *argv[])
{
int x;
cin>>x;
cout<<primo(x)<<"\n";
system("PAUSE");
return EXIT_SUCCESS;
}
bool primo(int x){
int c=0;
for(int i=1; i<=x; i++){
if(x % i == 0){
c++;
}
}
if(c==2){
return 1;
}
else{
return 0;
}
}
3- Escreva um método que receba o ano e retorne 1 se for bissexto e 0 se não for. Um
ano é bissexto quando divisível por 4, mas não por 100. Um ano também é bissexto
quando divisível por 400.

bool ano (int a){


if(a%4==0 && a%100!=0 || a%400==0){
return 1;
}
else {
return 0;
}
}
int main(int argc, char *argv[])
{
int a;
cin>>a;
cout<<ano(a)<<"\n";
system("PAUSE");
return EXIT_SUCCESS;
}
4- Desenvolver um programa onde você entre via teclado com dois valores e após a
digitação o usuário escolha um seletor de opção (menu) com as seguintes opções:
- Multiplicação; - Adição; - Divisão; - Subtração; - Fim do processo;
Obs. Criar um método para cada opção e dentro do case chamar as funções
respectivamente.
int adicao(int n1, int n2){
return n1 + n2;
}
int subtracao(int n1,int n2){
return n1 + n2;
}
int multiplicacao(int n1,int n2){
return n1 * n2;
}

int divisao(int n1,int n2){


return n1 / n2;
}
int main(int argc, char *argv[])
{
int i, n, op;
cout<<"Digite dois valores" << endl;
cin >> i >> n;
cout << "Digite a operacao desejada"<< endl;
cout << "1-Adicao"<< endl;
cout << "2-Subtracao"<< endl;
cout << "3-Multiplicacao"<< endl;
cout << "4-Divisao"<< endl;
cin >> op;
switch (op){
case 1:
cout << (adicao(i,n);
break;
case 2:
cout << subtracao(i,n);
break;
case 3:
cout << multiplicacao(i,n);
break;
case 4:
cout << divisao(i,n);
break;
default :
break;
}
system("PAUSE");
return EXIT_SUCCESS;
}
RECURSIVIDADE
A RECURSIVIDADE É A DEFINIÇÃO DE UMA SUB-ROTINA (FUNÇÃO OU
MÉTODO) QUE PODE INVOCAR A SI MESMA. UM EXEMPLO DE APLICAÇÃO DA
RECURSIVIDADE PODE SER ENCONTRADO NOS ANALISADORES SINTÁTICOS
RECURSIVOS PARA LINGUAGENS DE PROGRAMAÇÃO. A GRANDE VANTAGEM
DA RECURSÃO ESTÁ NA POSSIBILIDADE DE USAR UM PROGRAMA DE
COMPUTADOR FINITO PARA DEFINIR, ANALISAR OU PRODUZIR UM ESTOQUE
POTENCIALMENTE INFINITO DE SENTENÇAS, DESIGNS OU OUTROS DADOS.

• Um método comum de simplificação consiste em dividir um problema em


subproblemas do mesmo tipo. Como técnica de programação, isto se
denomina divisão e conquista, e constitui a chave para o desenvolvimento de
muitos algoritmos importantes, bem como um elemento fundamental do
paradigma de programação dinâmica.
• Praticamente todas as linguagens de programação usadas hoje em dia
permitem a especificação direta de funções e procedimentos recursivos.
Quando uma função é invocada, o computador (na maioria das linguagens
sobre a maior parte das arquiteturas baseadas em pilhas) ou a implementação
da linguagem registra as várias instâncias de uma função (em muitas
arquiteturas, usa-se uma pilha de chamada, embora outros métodos possam
ser usados). Reciprocamente, toda função recursiva pode ser transformada em
uma função iterativa usando uma pilha.
• Em geral, uma definição recursiva é definida por casos: um número limitado de
casos base e um caso recursivo. Os casos base são geralmente situações
triviais e não envolvem recursão.
• Um exemplo comum usando recursão é a função para calcular o fatorial de um
natural N. Nesse caso, no caso base o valor de 0! é 1. No caso recursivo, dado
um N > 0, o valor de N! é calculado multiplicando por N o valor de (N-1)!, e
assim por diante, de tal forma que N! tem como valor N * (N-1) * (N-2) * ... * (N-
N)!, onde (N-N)! representa obviamente o caso base. Em termos recursivos:
5- Gere um método que trabalhe com fatorial, lembrando o fatorial é ele vezes a
quantidade dele mesmo. Ex. fat 5 = 5*4*3*2*1.
long fatorial(int n);
int main(int argc, char** argv) {
int x;
cin>>x;
cout<<fatorial(x)<<endl;
return 0;
}
long fatorial(int n)
{
long vfat;
if ( n <= 1 )
//Caso base: fatorial de n <= 1 retorna 1
return (1);
else
{
//Chamada recursiva
vfat = n * fatorial(n - 1);
return (vfat);
}
}

Você também pode gostar