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

Тема в разделе "Visual Basic", создана пользователем goshanoob, 16 ноя 2010.

  1. goshanoob

    goshanoob Member

    Регистрация:
    16 ноя 2010
    Сообщения:
    5
    Симпатии:
    0
    Братюни! Такая соль: числа Фибоначчи получаются следующим образом: первое равно 0, второе 1, каждое последующее равно сумме двух предыдущих.
    Я написал функцию с рекурсией:
    Код (LotusScript):
    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, но получил длинющую строку унылых чисел. Как можно решить эту проблему?
     
  2. acorn

    acorn PHP Developer

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

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

    etc Гость

    Это чтоб наверняка?
     
  4. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    Зачем описывать ByVal num As Integer , если юзаете глобальные?
     
  5. etc

    etc Гость

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

    goshanoob Member

    Регистрация:
    16 ноя 2010
    Сообщения:
    5
    Симпатии:
    0
    Это всё по невнимательности)

    Массивы хорошо, но я выбираю трудный путь!
     
  7. acorn

    acorn PHP Developer

    Регистрация:
    29 авг 2004
    Сообщения:
    599
    Симпатии:
    3
    вот тогда пример:
    Код (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);
    сорри, бэсик не знаю
     
  8. goshanoob

    goshanoob Member

    Регистрация:
    16 ноя 2010
    Сообщения:
    5
    Симпатии:
    0
    Спасибо!
    В итоге запилил следующий код:
    Код (LotusScript):
    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
    Изначально мне не хватило широты мышления, чтобы осознать, что можно добавить цикл в вызывающую процедуру, а не в рекурентную)
     
Загрузка...

Поделиться этой страницей