FIBONACCI

BILLCLINTON 29/11/2010 21:25:51
#358446
Pessoal, estou tentando fazer a sequência de Fibnacci em uma função do VBA mas está dando o erro #VALOR!
Alguém sabe qual é o problema?

Function fibo(n As Variant) As Variant
Dim i As Double
i = 2

If n <= 0 Then
fibo = [Ô]Não existe[Ô]

ElseIf n = 1 Then
fibo = 1

ElseIf n = 2 Then
fibo = 2

Else

Do While i <> n

fibo(i) = (fibo(i - 1)) * (fibo(i - 2))

i = (1 + i)

Loop

End If

End Function
BILLCLINTON 29/11/2010 21:33:29
#358447
corrigindo, gentee (mas continua dando o erro...) :


Function fibo(n As Variant) As Variant
Dim i As Double
i = 2

If n <= 0 Then
fibo = [Ô]Não existe[Ô]

ElseIf n = 1 Then
fibo = 1

ElseIf n = 2 Then
fibo = 2

Else

Do While i <> n

fibo(i) = (fibo(i - 1)) + (fibo(i - 2))

i = (1 + i)

Loop

End If

End Function
MARCELOSN 29/11/2010 21:57:33
#358449
boa noite fiz um modelo em vba veja se ajuda

Function calcfibonacci() As String
Dim fibonacci(10) As Long
Dim dados As String
Dim i As Integer

fibonacci(1) = 1
fibonacci(2) = 1
For i = 3 To 10
fibonacci(i) = fibonacci(i - 1) + fibonacci(i - 2)
Next i
For i = 1 To 10
dados = dados & fibonacci(i) & Chr(13)
Next i
MsgBox dados
End Function
LLAIA 29/11/2010 22:06:06
#358450
Vc está fazendo chamadas recursivas, não é necessário inserir um loop dentro da função (na realidade, alguns especialista afirmam que o verdadeiro loop em computação é o recursivo). a sua definição inicial dentro da função para os primeiros pares tava errada. Este é o correto: Fibonacci Wikipedia

Estou enviando um projetinho que acredito que seja a funcionalidade que vc está querendo. Depois tente implementar uma função recursiva pra calcular fatoriais. A função ficou simples assim:

Function fibo(n As Variant) As Variant

If n = 0 Then
fibo = 0
ElseIf n = 1 Then
fibo = 1
Else
fibo = fibo(n - 1) + fibo(n - 2)
End If

End Function
BILLCLINTON 29/11/2010 22:21:44
#358451
Entendi, gente... Muito obrigada!
E se, usando o mesmo raciocínio do Fibonacci, eu quisesse implementar uma função que obedeça a essa sequencia: {1, 2, 2, 4, 8, 32, 256...}
Ou seja, tirando os 2 termos iniciais (1,2), um termo n sempre será dado pela multiplicação entre (n-1)(n-2)
Ou seja
f(1) = 1
f(2) = 2
n>2 temos que f(n) = f(n-1)*f(n-2)

Alguém tem alguma idéia de como eu posso fazer isso?

LLAIA 29/11/2010 23:17:17
#358455
é só modificar as duas condições iniciais dentro da função de acordo co o que vc quer, e em vez de somar quando for maior que 2 vc multiplica os dois termos
BILLCLINTON 30/11/2010 11:51:20
#358486
Então, eu tento fazer isso, só que aparece o erro #VALOR!

Alguma idéia?
LLAIA 30/11/2010 14:01:30
#358502
posta o seu código
Tópico encerrado , respostas não são mais permitidas