[1] Comentário enviado por
vinipsmaker em 21/05/2009 - 11:13h:
Consegui reduzir o número de linhas para 27, e o script ficou melhor para o aprendizado também:
#include <stdio.h>
void main()
{
int n1 = 1 , n2 = 1 , n3 , v1 , i;
printf("Quantos números você quer ver?\n");
scanf("%i" , &v1);
printf("Sequência:\n");
if(v1 == 2 || v1 == 1)
{
printf("1\n");
if(v1 == 2)
printf("1\n");
}
else if(v1 > 2)
{
printf("1\n1\n");
for(i = (v1 - 2) ; i != 0 ; i -= 1)
{
n3 = n2;
n2 = n1;
n1 = n2 + n3;
printf("%d\n" , n1);
}
}
else if(v1 != 0)
printf("Número inválido para a sequência\n");
}
[2] Comentário enviado por
allisonvoll em 22/05/2009 - 09:59h:
Reduzi para 24, se tirar os espaços e identação como o colega acima e o autor do script, cai para 17
#include <stdio.h>
int main(int argc, char** argv)
{
int v1,i;
printf("Quantos números você quer ver?\n");
scanf("%d",&v1);
printf("Sequência:\n");
if (v1 <= 2)
{
printf("1\n");
return 0;
}
int a = 1, b = a, c;
for (i=0; i<v1; i++,c=a,a=a+b,b=c)
printf("%d\n", b);
return 0;
}
[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);
}
int fib(int n)
{
if(n<=2)
{
return 1;
}
else
{
return fib(n-2)+fib(n-1);
}
}
[4] Comentário enviado por
vinipsmaker em 22/05/2009 - 19:20h:
Achei interessante o uso da recursividade.
[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");
}
Até mais!!!
[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;
}