Рекурсия

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Wolf-X
Начинающий
Начинающий
 
Сообщения: 10
Зарегистрирован: 08.10.2004 (Пт) 21:23

Рекурсия

Сообщение Wolf-X » 22.01.2005 (Сб) 18:51

Знаю что ламерский вопрос но... срочно надо сдать а не получается :oops:

Вычислить с помощью рекурсии
P= (1+sin 0.1)*(1+sin 0.2)…(1+sin 10)


Ребята, помогите плизз

skiperski
Идеолог
Идеолог
Аватара пользователя
 
Сообщения: 1386
Зарегистрирован: 25.06.2002 (Вт) 15:52

Сообщение skiperski » 22.01.2005 (Сб) 18:59

Код: Выделить всё
Public Function test(ByVal Param As Single) As Single
    test = 1 'начальное значение
    If (Param = 0) Then Exit Function 'выход из рекурсии
    test = (1 + Sin(Param)) * test(Round(Param - 0.1, 1))
End Function

или
Код: Выделить всё
Public Function test2() As Single
    Static Param As Single
    test2 = 1
    Param = Round(Param + 0.1, 1)
    If (Param > 10) Then
        Param = 0
        Exit Function
    End If
    test2 = (1 + Sin(Param)) * test2()
End Function

Immediate window:
Код: Выделить всё
?test(10), test2()
1,729905E-14                1,729904E-14

Daz
Новичок
Новичок
 
Сообщения: 27
Зарегистрирован: 27.12.2003 (Сб) 23:22

Сообщение Daz » 22.01.2005 (Сб) 21:34

Можно и так:

Код: Выделить всё

Public Function p(n As Double, k) As Double
p = 1
For i = n To k Step 0.1
  res = 1 + Sin(i)
p = p * res
Next
End Function


Private Sub Command1_Click()
Print p(0.1, 10)
End Sub
Автор благодарит алфавит за любезно предоставленные буквы.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 24.01.2005 (Пн) 11:12

Это не рекурсия.
Lasciate ogni speranza, voi ch'entrate.

Daz
Новичок
Новичок
 
Сообщения: 27
Зарегистрирован: 27.12.2003 (Сб) 23:22

Сообщение Daz » 24.01.2005 (Пн) 21:16

alibek писал(а):Это не рекурсия.


У меня, или у skiperski ?
Автор благодарит алфавит за любезно предоставленные буквы.

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 24.01.2005 (Пн) 22:25

У Вас, Daz, не рекурсия, а просто цикл...

Daz
Новичок
Новичок
 
Сообщения: 27
Зарегистрирован: 27.12.2003 (Сб) 23:22

Сообщение Daz » 25.01.2005 (Вт) 3:34

Amed писал(а):У Вас, Daz, не рекурсия, а просто цикл...


Не просто цикл, а обычный линейно-рекурсивный :? :lol:

Простейшим примером рекурсии является линейная рекурсия, когда функция содержит единственный условный вызов самой себя. В таком случае рекурсия становится эквивалентной обычному циклу. А любой циклический алгоритм можно преобразовать в линейно-рекурсивный и наоборот.
Автор благодарит алфавит за любезно предоставленные буквы.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 25.01.2005 (Вт) 8:41

Это вообще не рекурсия.
Если бы было p = p() * res, тогда да. А в данном примере p это обычная переменная.
Lasciate ogni speranza, voi ch'entrate.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4

    TopList