VB关于Byval

来源:百度知道 编辑:UC知道 时间:2024/06/02 10:56:18
Public Function f(ByVal n%, ByVal r%)
If n <> 0 Then
f = f(n \ r, r)
Print n Mod r
End If
End Function

Private Sub Command1_Click()
Print f(100, 8)
End Sub

请高手指教输出结果是什么?怎么运算出的结果?此题中Byval貌似不起作用是为什么?谢谢帮忙
很感谢!对于这题我还有个问题:为什么程序不按顺序先输出f(12,8)的返回结果?再输出f(1,8)的返回结果?

f(100,8)
--f(12,8)
----f(1,8)
------f(0,8) //这一句没有什么实际动作被执行,所以f的返回值没有 意义
----out 1
--out 4
out 4

main out <无意义>

最终结果相当于:
print(1)
print(4)
print(4)
print(某个无意义的f的返回值(不知道vb是不是这样定义的,在delphi下这种情况就是无意义的))

注:你这里是VB,虽然函数参数加了byval,,但VB在递归调用的过程中还是会重新给函数分配空间,这样一来byval肯定没用啦。

因为你的输出语句在递归调用的下面,这样一来当程序在输出f(12,8)的返回结果之前就会先调用f(1,8)。另外,这个f函数的返回结果要么是零,要么就是一个无意义的数。因为递归到最后你没有给f赋值。