• 🔥 Бесплатный курс от Академии Кодебай: «Анализ защищенности веб-приложений»

    🛡 Научитесь находить и использовать уязвимости веб-приложений.
    🧠 Изучите SQLi, XSS, CSRF, IDOR и другие типовые атаки на практике.
    🧪 Погрузитесь в реальные лаборатории и взломайте свой первый сайт!
    🚀 Подходит новичкам — никаких сложных предварительных знаний не требуется.

    Доступ открыт прямо сейчас Записаться бесплатно

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

  • Автор темы Автор темы 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, но получил длинющую строку унылых чисел. Как можно решить эту проблему?
 
позвольте спросить, а зачем рекурсия? вот вам обычный цикл, правда на pascal:
PHP:
a[1]:=1;
a[2]:=1;
for i:=3 to N do
a[i]:=a[i-1]+a[i-2];
всё, в массиве a есть ваши чиселки.

Добавлено: ps. первые два числа фибоначчи равны единице по-моему..
 
Зачем описывать ByVal num As Integer , если юзаете глобальные?
 
OKEN Это задел на 2 часть задания. Вот начало "удалось", а далее никак..
 
Это чтоб наверняка?
Зачем описывать 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. первые два числа фибоначчи равны единице по-моему..
Массивы хорошо, но я выбираю трудный путь!
 
Спасибо!
В итоге запилил следующий код:
Код:
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
Изначально мне не хватило широты мышления, чтобы осознать, что можно добавить цикл в вызывающую процедуру, а не в рекурентную)
 
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab