• Paranoid - курс по анонимности и безопасности в сети от команды codeby. Защита персональных данных, анонимность в сети интернет, настройка виртуальных машин, безопасная передача данных, анти форензика и еще много всего полезного. Подробнее ...

  • Мобильный клиент нашего форума для Android гаджетов доступен в Google Play Market по этой ссылке. Клиент можно скачать с нашего форума по этой ссылке. Последняя версия МК в нашем телеграм канале вот здесь

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

16.11.2010
5
0
#1
Братюни! Такая соль: числа Фибоначчи получаются следующим образом: первое равно 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, но получил длинющую строку унылых чисел. Как можно решить эту проблему?
 

acorn

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

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

hosm

* so what *
18.05.2009
2 442
6
#4
Зачем описывать ByVal num As Integer , если юзаете глобальные?
 
E
#5
OKEN Это задел на 2 часть задания. Вот начало "удалось", а далее никак..
 
16.11.2010
5
0
#6
Зачем описывать 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. первые два числа фибоначчи равны единице по-моему..
Массивы хорошо, но я выбираю трудный путь!
 
16.11.2010
5
0
#8
Спасибо!
В итоге запилил следующий код:
Код:
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
Изначально мне не хватило широты мышления, чтобы осознать, что можно добавить цикл в вызывающую процедуру, а не в рекурентную)