Após dias sem abrir o arquivo-apostila eu continuei a ler e vendo o comando "for". Então tive a idéia de fazer um programa para calcular a sequência fibonacci.
Você digita quantos números quer ver e a sequência fica limitada apenas pelo computador.
[3] Comentário enviado por ajansmit em 22/05/2009 - 18:29h
Diminua para 24 (incluindo perda de espaço) usando recursividade.
/*Retorna um termo da série Fibonacci: */
#include <stdio.h>
#include <stdlib.h>
int fib(int n);
int main()
{
int r, num;
printf("Digite um número\n");
scanf("%d", &num);
r = fib(num);
printf("%d\n", r);
}
[5] Comentário enviado por Teixeira em 24/05/2009 - 12:31h
Um pouco de história:
Fibonacci era um matemático italiano que lá pelos idos de 1202 ficou fascinado com a capacidade de reprodução dos coelhos.
Decidiu então crar um modelo que demonstrasse o crescimento de uma comunidade de coelhos, assumindo como verdadeiras as seguintes regras:
1- Que os coelhos atingem a idade madura em um mês a partir do nascimaento;
2- Que a cada mês um casal de coelhos produzirá um par de novos coelhos;
3- Que os coelhos são imortais.
Claro que ele não levou em consideração o sexo dos coelhos provenientes da primeira leva e das sebsequentes. Mas tudo isso não passa de mera teoria, e - naquela época - de curiosidade matemética.
A título de ilustração, aqui está um programinha ingênuo em basic que demonstra de fora rústica os números de Fibonacci:
10 LET A=0
20 LET B=1
30 LET C=A+B
40 PRINT C
50 LET A=B
60 LET B=C
70 GOTO 30
O programa do jeito que está não para nunca (entra em loop infinito). Falta-lhe um loop de controle. Em basic serão poucas linhas a mais.
Em C, Assembly, etc. o número de linhas será sensivelmente maior.
Além do que, ele começa do um (um coelho hermafrodita?).
Sempre existem maneiras de melhorar um código, a partir do momento em que se entenda o problema e os caminhos para a solução.
Será que dá para encurtar mais ainda o código sugerido pelo vinipsmaker e comentado pelos colegas?
(Isto é uma provocação - no bom sentido, é claro).
[6] Comentário enviado por thiagodorneles em 25/05/2009 - 10:42h
Ola!
Reduzi seu código um pouco mais, para 15 linhas.
Note que usei uma função recursiva devolvendo o valor, segue abaixo:
#include<stdio.h>
long int fibo(int n){
return ((n<2)?1:(fibo(n-2)+fibo(n-1)));
}
int main()
{
int v=0;
long int r=0;
printf("Quantos deseja: ");
scanf("%d",&v);
r = fibo(v);
printf("Resultado fibonacci: %ld\n",r);
}
Somente para mencionar, utilizei as posições fibonacci como se fosse um vetor, ou seja, posição 0 igual ao primeiro valor, e assim sucessivamente, diferente dos outros códigos acima. Mas isso é somente para frizar como meu codigo funciona. Abaixo segue a tabela demonstrando:
Posicao | 0 | 1 | 2 | 3 | 4 | 5 | 6
-------------------------------------
Valores | 1 | 1 | 2 | 3 | 5 | 8 | 13
Outra coisa, claro que mudei um pouco a idéia do autor que era imprimir a sequencia de valores até a certa posição informada pelo usuário, fiz de maneira somente para retornar uma posição determiada.
Isto se resolveria simplesmente, note abaixo ficando apenas com 17 linhas, segue:
#include<stdio.h>
long int fibo(int n){
return ((n<2)?1:(fibo(n-2)+fibo(n-1)));
}
int main(){
int v=0,i=0;
long int r=0;
printf("Quantos deseja: ");
scanf("%d",&v);
for (i=0;i<v;i++){
r = fibo(i);
printf("%ld ",r);
}
printf("\n");
}
[8] Comentário enviado por allisonvoll em 27/05/2009 - 11:35h
Partindo do princípio do código em basic ilustrado por teixeira, segue um pequeno algorítimo apenas com o miolo do fibonacci (como o feito em basic) também em 7 linhas, em loop infinito portanto quebra o limite de longint logo de ínicio.
#include <stdio.h>
int main(){
long int a=1,b=1,c;
for (;;c=a,a=a+b,b=c)
printf("%d\n",b);
return 0;
}