作业帮 > 数学 > 作业

VB程序,递归法求1+1/2+1/3+1/4+……+1/[f(x-1)+f(x-2)]

来源:学生作业帮 编辑:拍题作业网作业帮 分类:数学作业 时间:2024/05/01 21:03:15
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…………
第一个问题:为什么当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(零的负一次方无意义),因此会出错.