Ряд Фибоначчи

  • Автор темы goshanoob
  • Дата начала
G

goshanoob

Братюни! Такая соль: числа Фибоначчи получаются следующим образом: первое равно 0, второе 1, каждое последующее равно сумме двух предыдущих.
Я написал функцию с рекурсией:
Код:
Function Fib(ByVal vs As Integer) As Integer 
If vs = 0 Then 
Fib = 0 

ElseIf vs = 1 Then 
Fib = 1 
Else 
Fib = Fib(vs - 1) + Fib(vs - 2) 
End If 
End Function 

Dim vs As Integer 
vs = Fib(InputBox("Чис")) 
MsgBox(vs)

Теперь передо мной новая цель - вывести весь ряд, до введённого числа. Видимо нужно последовательно скармиливать процедуре последовательные числа, для этого я пытался запилить цикл for, но получил длинющую строку унылых чисел. Как можно решить эту проблему?
 
A

acorn

позвольте спросить, а зачем рекурсия? вот вам обычный цикл, правда на pascal:
PHP:
a[1]:=1;
a[2]:=1;
for i:=3 to N do
a[i]:=a[i-1]+a[i-2];
всё, в массиве a есть ваши чиселки.

Добавлено: ps. первые два числа фибоначчи равны единице по-моему..
 
H

hosm

Зачем описывать ByVal num As Integer , если юзаете глобальные?
 
E

etc

OKEN Это задел на 2 часть задания. Вот начало "удалось", а далее никак..
 
G

goshanoob

Это чтоб наверняка?
Зачем описывать ByVal num As Integer , если юзаете глобальные?
Это всё по невнимательности)

позвольте спросить, а зачем рекурсия? вот вам обычный цикл, правда на pascal:
PHP:
a[1]:=1;
a[2]:=1;
for i:=3 to N do
a[i]:=a[i-1]+a[i-2];
всё, в массиве a есть ваши чиселки.

Добавлено: ps. первые два числа фибоначчи равны единице по-моему..
Массивы хорошо, но я выбираю трудный путь!
 
G

goshanoob

Спасибо!
В итоге запилил следующий код:
Код:
Function Fib(ByVal i As Double) As Double
If i = 0 Then
Fib = 0
ElseIf i = 1 Then
Fib = 1
Else
Fib = Fib(i - 1) + Fib(i - 2)
End If
End Function

Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
Dim vs, i As Integer

vs = InputBox("Укажите номер числа")
For i = 0 To vs - 1

TextBox1.Text = TextBox1.Text & " " & Fib(i)

Next i

End Sub
Изначально мне не хватило широты мышления, чтобы осознать, что можно добавить цикл в вызывающую процедуру, а не в рекурентную)
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!