C++ ::: Desafios e Lista de Exercícios Resolvidos ::: Recursão (Recursividade) |
Exercício Resolvido de C++ - Um método recursivo que calcula o número de Fibonacci para um dado índiceQuantidade de visualizações: 1164 vezes |
|
Pergunta/Tarefa: Observe a série de números Fibonacci abaixo: Série: 0 1 1 2 3 5 8 13 21 34 55 89 Índice: 0 1 2 3 4 5 6 7 8 9 10 11 Este algoritmo consiste em, dado um determinado índice, retornar o número de Fibonacci correspondente. Recursivamente, o cálculo pode ser feito da seguinte forma: fib(0) = 0; fib(1) = 1; fib(indice) = fib(indice - 2) + fib(indice - 1); sendo o indice >= 2 Os casos nos quais os índices são 0 ou 1 são os casos bases (aqueles que indicam que a recursividade deve parar). Seu método deverá possuir a seguinte assinatura:
int fibonacci(int indice){
// sua implementação aqui
}
Informe o índice: 6 O número de Fibonacci no índice informado é: 8 Veja a resolução comentada deste exercício usando C++:
#include <string>
#include <iostream>
using namespace std;
// assinatura da função recursiva
int fibonacci(int indice);
int main(int argc, char *argv[]){
// variáveis usadas na resolução do problema
int indice;
// vamos solicitar o índice do número de Fibonacci
cout << "Informe o índice: ";
// lê o índice
cin >> indice;
// calcula o número de Fibonacci no índice informado
cout << "O número de Fibonacci no índice informado é: " <<
fibonacci(indice) << endl;
system("PAUSE"); // pausa o programa
return EXIT_SUCCESS;
}
// função recursiva que o número de Fibonacci em um determinado índice
int fibonacci(int indice){
if(indice == 0){ // caso base; interrompe a recursividade
return 0;
}
else if(indice == 1){ // caso base; interrompe a recursividade
return 1;
}
else{ // efetua uma nova chamada recursiva
return fibonacci(indice - 1) + fibonacci(indice - 2);
}
}
|
C ::: Desafios e Lista de Exercícios Resolvidos ::: Matemática e Estatística |
Exercício Resolvido de C - Escreva um programa C que pede um número inteiro e informa se o número informado é um número de ArmstrongQuantidade de visualizações: 1355 vezes |
|
Pergunta/Tarefa: Um número é chamado de número de Armstrong quando a soma de cada um dos seus dígitos, elevado à quantidade de dígitos do número, equivale ao próprio número. Por exemplo, 153 e 93084 são números de Armstrong, já que: 153 = 13 + 53 + 33 93084 = 95 + 35 + 05 + 85 + 45 Escreva um programa C que pede para o usuário informar um número inteiro e informa se o número informado é um número de Armstrong ou não. Seu código deve usar apenas os operadores matemáticos disponíveis na linguagem C. Sua saída deverá ser parecida com: Informe um número inteiro: 153 O número informado é um número de Armstrong Veja a resolução comentada deste exercício usando C:
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <math.h>
int main(int argc, char *argv[]){
// variáveis usadas na resolução do problema
int numero, quant_digitos = 0, temp, resto, soma = 0;
setlocale(LC_ALL,""); // para acentos do português
// vamos pedir para o usuário informar um número
printf("Informe um número inteiro: ");
scanf("%d", &numero);
// o primeiro passo é obter a quantidade de dígitos que o número informado
// possui
temp = numero;
while(temp != 0) {
quant_digitos = quant_digitos + 1;
temp = temp / 10;
}
// agora efetuamos o cálculo que verifica se o número é um número
// de Armstrong ou não
temp = numero;
while(temp > 0){
resto = temp % 10;
soma = soma + (int)(pow(resto, quant_digitos));
temp = temp / 10;
}
if(soma == numero){
printf("O número informado é um número de Armstrong");
}
else{
printf("O número informado não é um número de Armstrong");
}
printf("\n\n");
system("PAUSE");
return 0;
}
|
C++ ::: Dicas & Truques ::: Recursão (Recursividade) |
Como calcular fatorial em C++ usando recursividadeQuantidade de visualizações: 10308 vezes |
|
O fatorial de um determinado número, representado por n! equivale a multiplicar este número por seus antecessores. Assim, o fatorial de 4 (4!) pode ser calculado da seguinte forma: 4 x 3 x 2 x 1 = 24 Sempre que falamos de recursão, o cálculo de fatorial nos auxilia na exemplicação por ser relativamente fácil de se entender todas as etapas do processo. O código abaixo mostra uma função recursiva em C++ que calcula o fatorial de qualquer número. Tenha cuidado. Calcular o fatorial de um número maior que 10 pode tornar sua máquina extremamente lenta, além de, muitas vezes, não retornar os resultados esperados.
#include <iostream>
using namespace std;
// função recursiva para calcular o fatorial
// de um determinado número
int fatorial(int n){
if(n == 0)
return 1;
else
return n * fatorial(n - 1);
}
int main(int argc, char *argv[]){
// vamos calcular o fatorial de 5
int res = fatorial(5);
// exibe o resultado
cout << "O fatorial de 5 é: " << res << endl;
system("PAUSE"); // pausa o programa
return EXIT_SUCCESS;
}
|
C ::: Dicas & Truques ::: Arquivos e Diretórios |
Como ler o conteúdo de um arquivo uma linha de cada vez usando a função fgets() da linguagem CQuantidade de visualizações: 29499 vezes |
A função fgets(), disponível no header cstdio ou stdio.h, é usada para ler caracteres de um arquivo e armazená-los em um vetor de caracteres. Esta função recebe três argumentos. Veja:char *fgets(char *buffer, int num, FILE *file); No exemplo abaixo usamos um laço while() para ler o conteúdo até que o final de arquivo EOF seja encontrado. Desta forma, como sabemos que cada linha no arquivo termina com um marcador de fim de linha, fica fácil ler cada linha. É claro que se a linha sendo lida for maior que o tamanho do buffer, o efeito não será conseguido. Observe ainda que cada linha lida contém o caractere de fim de linha anexado a ela:
#include <stdio.h>
#include <stdlib.h>
const int TAM_BUFFER = 255; // quantidade de caracteres
// a serem lidos no buffer de cada vez
int main(int argc, char *argv[])
{
FILE *arquivo = fopen("c:\\testes.txt", "r");
char buffer[TAM_BUFFER];
// testa se o arquivo foi aberto com sucesso
if(arquivo != NULL){
// vamos usar um laço para ler o conteúdo do arquivo
// e armazenar no buffer
while(fgets(buffer, TAM_BUFFER, arquivo)){
printf("%s\n", buffer);
}
fclose(arquivo); // libera o ponteiro para o arquivo
}
else{
printf("Nao foi possivel abrir o arquivo.");
}
printf("\n\n");
system("PAUSE");
return 0;
}
|
Nossas 20 dicas & truques de programação mais populares |
|
JavaScript - Como calcular o cateto oposto dadas as medidas da hipotenusa e do cateto adjascente em JavaScript C# - Como excluir todos os itens selecionados em uma ListBox de múltipla seleção do C# Windows Forms Java - Como adicionar conteúdo a um arquivo texto existente em Java usando BufferedWriter e FileWriter |
Você também poderá gostar das dicas e truques de programação abaixo |
|
MySQL - Como usar joins no MySQL |
Nossas 20 dicas & truques de programação mais recentes |
Últimos Projetos e Códigos Fonte Liberados Para Apoiadores do Site |
|
Python - Como criar o jogo Pedra, Papel, Tesoura em Python - Jogo completo em Python com código comentado |
Últimos Exercícios Resolvidos |
E-Books em PDF |
||||
|
||||
|
||||
Linguagens Mais Populares |
||||
|
1º lugar: Java |




