На страницу 1, 2 След. |
|
|
Есть поцедура:
Private Sub B(ByVal intY As Integer) As Integer
If intY <0 Then
Return (intY*Math.Abs(B(intY\2)) )
Else
Return (1)
End If
End Sub
Вызываем эту процедуру:
Private Sub C()
Dim intX, intZ As Integer
intX = -7
intZ = B(intX)
Debug.WriteLine(intZ)
End Sub
Чему будет ровняться intZ?
Буду очень признательна за помощь |
|
|
|
|
|
а что это за язык?.. |
|
|
|
|
|
|
я воще не спец конечно но помойму это работать не будет ибо
из (intY*Math.Abs(B(intY\2)) )
вызывается процедура B, а процедура сама себя вызывать не может
моё скромное имхо |
|
|
|
|
|
Цитата: |
а процедура сама себя вызывать не может
|
не согласен, это вроде как реверсивный вызов зовется. |
|
|
|
|
|
во, поискал в гугле
цитата
"При каждом вызове процедурой самой себя выделяется дополнительный объем этой памяти. Процедура, вызывающая сама себя, называется рекурсивной. Рекурсивная процедура, которая бесконечно вызывает саму себя, приводит к ошибке."
а процедура B сдается мне будет себяч бесконечно вызывать пока intY не станет меньше нуля |
|
|
|
|
|
ms vb net |
|
|
|
|
|
Цитата: |
Рекурсивная процедура, которая бесконечно вызывает саму себя, приводит к ошибке."
а процедура B сдается мне будет себяч бесконечно вызывать пока intY не станет меньше нуля
|
раз функция вызывает саму себя по условию, то вызывать она себя будет не бесконечно, а ограниченное число раз... |
|
|
|
|
|
пока собирался написАть тут насчет языка, вы уже стока постов понаделали. |
|
|
|
|
|
это не vb.net
то есть vb очевидно, но оно не скомпилируется (у меня по крайней мере)
может это какой старый бэйсик?
я 4-го уже не помню совсем )
'Return' statement in a Sub or a Set cannot return a value.
Expression does not produce a value.
Handles clause requires a WithEvents variable.
и тд и тп
даже после того как убрал пару очевидных багов
vb я видел давольно давно, а по .net'у напрочь не спец, но как-то это так...
надо "руками" компилировать и понимать, будет работать или нет |
|
|
|
|
|
Graff Sadko писал(а): |
во, поискал в гугле
цитата
"При каждом вызове процедурой самой себя выделяется дополнительный объем этой памяти. Процедура, вызывающая сама себя, называется рекурсивной. Рекурсивная процедура, которая бесконечно вызывает саму себя, приводит к ошибке."
а процедура B сдается мне будет себяч бесконечно вызывать пока intY не станет меньше нуля
|
Ты имеешь ввиду пока intY не станет равно 0?
Имхо, оно никогда не примет такое значение, и произойдет зацикливание. Получается у задачи нет ответа? |
|
|
|
|
|
да-да, ты вроде поняла что я хочу сказать
по идее зациклится оно пока Abs(B(intY\2)) не станет больше или равным нулю |
|
|
|
|
|
чего-то вы фигню говорите:
Math.Abs - возвращает абсолютное значение указанного числа. А что есть абсолютное значение числа?.. это его величина с положительным знаком. Поэтому вызовет она себя максимум один раз.
и правильный ответ, если я ничего не путаю, intZ = -7 |
|
|
|
|
|
Как я понимаю, тут вызывается абсолютное значение от процедеры В, а не от какого-то конкретного числа. И чему это может быть ровно я не представляю |
|
|
|
|
|
хм... был не прав. действительно, умножение на абсолютное значение функции, которая передает отрицательное число, а не абсолютное значение передаваемого параметра, реально функция зациклится. |
|
|
|
|
|