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

  • Автор темы Автор темы 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. первые два числа фибоначчи равны единице по-моему..
Массивы хорошо, но я выбираю трудный путь!
 
Массивы хорошо, но я выбираю трудный путь!

вот тогда пример:
PHP:
function getNext(i, a, b)
{
arr[i] = a + b;
if (i < N) getNext(i+1, b, arr[i]);
}
arr[1] = 1;
arr[2] = 1;
N = 10;
arr = array();
getNext(3, arr[1], arr[2]);
print(arr);
сорри, бэсик не знаю
 
Спасибо!
В итоге запилил следующий код:
Код:
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

🚀 Первый раз на Codeby?
Гайд для новичков: что делать в первые 15 минут, ключевые разделы, правила
Начать здесь →
🔴 Свежие CVE, 0-day и инциденты
То, о чём ChatGPT ещё не знает — обсуждаем в реальном времени
Threat Intel →
💼 Вакансии и заказы в ИБ
Pentest, SOC, DevSecOps, bug bounty — работа и проекты от проверенных компаний
Карьера в ИБ →

HackerLab