La serie de Fibonacci es una sucesión matemática donde el primer elemento es 0, el segundo es 1 y cada elemento restante es la suma de los dos anteriores, teniendo algo del estilo a:
0,1,1,2,3,5,8,13,21,34,55...
Además, esta serie tiene unas propiedades muy curiosas:
-La razón o cociente entre un término y el inmediatamente anterior varía continuamente, pero se estabiliza en el número áureo.
- Cualquier número natural se puede escribir mediante la suma de un número limitado de términos de la sucesión de Fibonacci, cada uno de ellos distinto a los demás. Por ejemplo, 17 = 13 + 3 + 1, 65 = 55 + 8 + 2.
-Tan sólo un término de cada tres es par, uno de cada cuatro es múltiplo de 3, uno de cada cinco es múltiplo de 5, etc.
-Cada número de Fibonacci es el promedio del término que se encuentra dos posiciones antes y el término que se encuentra una posición después.
-La suma de diez números Fibonacci consecutivos es siempre 11 veces superior al séptimo número de la serie.
-El último dígito de cada número se repite periódicamente cada 60 números.
Incluso, esta serie es "famosa" por haber salido en la novela de Dan Brown "El código Da Vinci" o como los patrones de la batería de la canción Lateralus del grupo Tool. Pero, ¿cual sería el código fuente que necesitaríamos para generar esta serie?. Pues depende del lenguaje, pero sería algo así:
Pascal
uses
crt;
var
cantidad,cont:integer;
function Fibonacci(valor:integer):integer;
begin
if valor = 1 then
fibonacci:= 1;
if valor=0 then
fibonacci:=0;
if valor>=2 then
Fibonacci:=(Fibonacci(valor-1) + Fibonacci(valor-2));
end;
begin
ClrScr;
write('cantidad de valores: ');readln(cantidad);
for cont:=1 to cantidad do
write(fibonacci(cont),', ');
ReadKey;
end.
F#
let rec fib n = if n <>
If n = 0 Then Return 0
If n < 3 Then Return 1
' The array can be of size n - 2 because we don't need slots for the n < 3 case.
ReDim Preserve results(n - 2)
Dim f As Func(Of Integer, Long) = AddressOf Me.calculator
Return calculator(n)
End Function
Function calculator(ByVal x As Integer) As Long
If x = 0 Then
Return 0
ElseIf x < 3 Then
Return 1
Else
Dim index As Integer = x - 3
Dim result As Long = results(index)
If result = 0 Then
result = calculator(x - 1) + calculator(x - 2)
results(index) = result
End If
Return result
End If
End Function
Ensamblador del Z80
Assembly Z-80a
ORG 0100H
LD A,10
PUSH A
CALL FIBO
RET
FIBO:
POP A
OR A
JR NC,FIBO1
DEC A
PUSH A
PUSH A
CALL FIBO
POP A
DEC A
PUSH A
CALL FIBO
RET
FIBO1:
LD A,1
RET
Python
def fibonnaci(n):
#Print Fibonacci sequence up to n
a,b = 0, 1
while b < b =" b,">
Powershell
Function Get-Fib ($n) {
$current = $previous = 1;
while ($current -lt $n) {
$current;
$current,$previous = ($current + $previous),$current}
}
Get-Fib 100
Fuente: Scott Hanselman
0,1,1,2,3,5,8,13,21,34,55...
Además, esta serie tiene unas propiedades muy curiosas:
-La razón o cociente entre un término y el inmediatamente anterior varía continuamente, pero se estabiliza en el número áureo.
- Cualquier número natural se puede escribir mediante la suma de un número limitado de términos de la sucesión de Fibonacci, cada uno de ellos distinto a los demás. Por ejemplo, 17 = 13 + 3 + 1, 65 = 55 + 8 + 2.
-Tan sólo un término de cada tres es par, uno de cada cuatro es múltiplo de 3, uno de cada cinco es múltiplo de 5, etc.
-Cada número de Fibonacci es el promedio del término que se encuentra dos posiciones antes y el término que se encuentra una posición después.
-La suma de diez números Fibonacci consecutivos es siempre 11 veces superior al séptimo número de la serie.
-El último dígito de cada número se repite periódicamente cada 60 números.
Incluso, esta serie es "famosa" por haber salido en la novela de Dan Brown "El código Da Vinci" o como los patrones de la batería de la canción Lateralus del grupo Tool. Pero, ¿cual sería el código fuente que necesitaríamos para generar esta serie?. Pues depende del lenguaje, pero sería algo así:
Pascal
uses
crt;
var
cantidad,cont:integer;
function Fibonacci(valor:integer):integer;
begin
if valor = 1 then
fibonacci:= 1;
if valor=0 then
fibonacci:=0;
if valor>=2 then
Fibonacci:=(Fibonacci(valor-1) + Fibonacci(valor-2));
end;
begin
ClrScr;
write('cantidad de valores: ');readln(cantidad);
for cont:=1 to cantidad do
write(fibonacci(cont),', ');
ReadKey;
end.
F#
let rec fib n = if n <>
Ruby
x1,x2 = 0,1; 0.upto(size){puts x1; x1 += x2; x1,x2 = x2,x1}
C#
static int Fibonacci (int x)
{
if (x <= 1) return 1; return Fibonacci (x-1) + Fibonacci (x-2); }
x1,x2 = 0,1; 0.upto(size){puts x1; x1 += x2; x1,x2 = x2,x1}
C#
static int Fibonacci (int x)
{
if (x <= 1) return 1; return Fibonacci (x-1) + Fibonacci (x-2); }
Scala
def fib( n: Int): Int = n match {
case 0 => 0
case 1 => 1
case _ => fib( n -1) + fib( n-2)
}
Erlang
fibo(0) -> 0 ;
fibo(1) -> 1 ;
fibo(N) when N > 0 -> fibo(N-1) + fibo(N-2) .
Perl
#!/usr/bin/perl
my $iterations = 10;
sub f($) {
if ( $_[0] <>
def fib( n: Int): Int = n match {
case 0 => 0
case 1 => 1
case _ => fib( n -1) + fib( n-2)
}
Erlang
fibo(0) -> 0 ;
fibo(1) -> 1 ;
fibo(N) when N > 0 -> fibo(N-1) + fibo(N-2) .
Perl
#!/usr/bin/perl
my $iterations = 10;
sub f($) {
if ( $_[0] <>
for ( my $i = 0; $i < $iterations; ++$i ) { print f( $i ) . "\n"; }
Ada
with Text_IO, Ada.Integer_Text_IO;
use Text_IO, Ada.Integer_Text_IO;
procedure Fibonacci is
Iterations : constant Natural := 10;
function F( N : Natural ) return Natural is
begin
if N <>
with Text_IO, Ada.Integer_Text_IO;
use Text_IO, Ada.Integer_Text_IO;
procedure Fibonacci is
Iterations : constant Natural := 10;
function F( N : Natural ) return Natural is
begin
if N <>
Pl/Sql
variable n number;
exec :n := 15;
with data as (select level le from dual connect by level <= :n) select fibo from data model dimension by (le) measures ( 0 fibo) rules ( fibo[1] = 0 , fibo[2] = 1 , fibo[le>2]=fibo[cv(le)-2]+fibo[cv(le)-1]
)
;
Visual Basic .Net
variable n number;
exec :n := 15;
with data as (select level le from dual connect by level <= :n) select fibo from data model dimension by (le) measures ( 0 fibo) rules ( fibo[1] = 0 , fibo[2] = 1 , fibo[le>2]=fibo[cv(le)-2]+fibo[cv(le)-1]
)
;
Visual Basic .Net
Dim results As Long()Function Fibo(ByVal n As Integer) As Long
If n = 0 Then Return 0
If n < 3 Then Return 1
' The array can be of size n - 2 because we don't need slots for the n < 3 case.
ReDim Preserve results(n - 2)
Dim f As Func(Of Integer, Long) = AddressOf Me.calculator
Return calculator(n)
End Function
Function calculator(ByVal x As Integer) As Long
If x = 0 Then
Return 0
ElseIf x < 3 Then
Return 1
Else
Dim index As Integer = x - 3
Dim result As Long = results(index)
If result = 0 Then
result = calculator(x - 1) + calculator(x - 2)
results(index) = result
End If
Return result
End If
End Function
Ensamblador del Z80
Assembly Z-80a
ORG 0100H
LD A,10
PUSH A
CALL FIBO
RET
FIBO:
POP A
OR A
JR NC,FIBO1
DEC A
PUSH A
PUSH A
CALL FIBO
POP A
DEC A
PUSH A
CALL FIBO
RET
FIBO1:
LD A,1
RET
Python
def fibonnaci(n):
#Print Fibonacci sequence up to n
a,b = 0, 1
while b < b =" b,">
Powershell
Function Get-Fib ($n) {
$current = $previous = 1;
while ($current -lt $n) {
$current;
$current,$previous = ($current + $previous),$current}
}
Get-Fib 100
Fuente: Scott Hanselman
7 comentarios:
Hola bro esta chido tu blog
oye una pregunta por ejemplo como
podria hacer un algoritmo o programa de la serie de fibonacci q cumpla con lo siguiente:
que imprima los primeros "n" terminos de la serie de fibonacci del numero "x"
¿?
me podrias ayudar bro
oye y con visual basic 6.0
lo tendras de casualidad para un microprocesador de intel de la serie ia 32 en lenguaje asembler
no me lo puedes pasar para pseint
Con simuproc
Con simuproc
Con simuproc ?
Publicar un comentario