VB程序,递归法求1+1/2+1/3+1/4+……+1/[f(x-1)+f(x-2)]Public Function f(x) As LongDim t As IntegerIf x = 1 Thent = 1ElseIf x = 2 Thent = 0.5ElseIf x >= 3 Thent = t + (f(x - 1)) ^ -1 + (f(x - 2)) ^ -1 + 0.5 + 1End Iff = tEnd FunctionPrivate Sub F
来源:学生作业帮助网 编辑:作业帮 时间:2024/11/06 08:14:37
VB程序,递归法求1+1/2+1/3+1/4+……+1/[f(x-1)+f(x-2)]Public Function f(x) As LongDim t As IntegerIf x = 1 Thent = 1ElseIf x = 2 Thent = 0.5ElseIf x >= 3 Thent = t + (f(x - 1)) ^ -1 + (f(x - 2)) ^ -1 + 0.5 + 1End Iff = tEnd FunctionPrivate Sub F
VB程序,递归法求1+1/2+1/3+1/4+……+1/[f(x-1)+f(x-2)]
Public Function f(x) As Long
Dim t As Integer
If x = 1 Then
t = 1
ElseIf x = 2 Then
t = 0.5
ElseIf x >= 3 Then
t = t + (f(x - 1)) ^ -1 + (f(x - 2)) ^ -1 + 0.5 + 1
End If
f = t
End Function
Private Sub Form_Click()
Label1.Caption = f(Val(Text1.Text))
End Sub
为什么当x=2时函数等于0,为什么当x=3时程序出错!
额……应该是1+1/2+1/3+1/5+1/8…………
VB程序,递归法求1+1/2+1/3+1/4+……+1/[f(x-1)+f(x-2)]Public Function f(x) As LongDim t As IntegerIf x = 1 Thent = 1ElseIf x = 2 Thent = 0.5ElseIf x >= 3 Thent = t + (f(x - 1)) ^ -1 + (f(x - 2)) ^ -1 + 0.5 + 1End Iff = tEnd FunctionPrivate Sub F
第一个问题:为什么当X=2时函数等于0呢.因为在f(x)函数中你的t的类型为整形,它不能接收浮点数(即带小数点的数据),如果是浮点数,则它会将该数截尾取整,即舍去小数点后的数据.因此当X=2时,函数返回值为0.
第二个问题,当X=3时,调用f(x)函数,传递实参x=3,在函数中执行x>=3中的语句,但因其中有递归调用,x-1=2,再次调用f(x)函数传递实参2,此时会执行x=2中的语句,t=0(舍掉小数点后的数据),此时f=t=0,执行完毕后,返回到调用处f(x-1)^-1,等价于0^-1(零的负一次方无意义),因此会出错.
第一个问题:为什么当X=2时函数等于0呢。因为在f(x)函数中你的t的类型为整形,它不能接收浮点数(即带小数点的数据),如果是浮点数,则它会将该数截尾取整,即舍去小数点后的数据。因此当X=2时,函数返回值为0.
第二个问题,当X=3时,调用f(x)函数,传递实参x=3,在函数中执行x>=3中的语句,但因其中有递归调用,x-1=2,再次调用f(x)函数传递实参2,此时会执行x=2中的语句,t...
全部展开
第一个问题:为什么当X=2时函数等于0呢。因为在f(x)函数中你的t的类型为整形,它不能接收浮点数(即带小数点的数据),如果是浮点数,则它会将该数截尾取整,即舍去小数点后的数据。因此当X=2时,函数返回值为0.
第二个问题,当X=3时,调用f(x)函数,传递实参x=3,在函数中执行x>=3中的语句,但因其中有递归调用,x-1=2,再次调用f(x)函数传递实参2,此时会执行x=2中的语句,t=0(舍掉小数点后的数据),此时f=t=0,执行完毕后,返回到调用处f(x-1)^-1,等价于0^-1(零的负一次方无意义),因此会出错。
收起