当前位置:文档之家› 17函数及递归算法

17函数及递归算法

定义函数、参数、返回值、递归算法

1.有如下Visual Basic自定义函数:

Function f(i As Single, j As Integer) As Boolean

If i <= j Then f = True Else f = False

End Function

则该函数的返回值类型是

(A)单精度实数型(B)整数型(C)逻辑型(D)字符串型

2.有如下Visual Basic自定义函数:

Function f(i As Single) As Boolean

If i <= 0 Then f = True Else f = False

End Function

执行语句s = f(-0.4)后,逻辑型变量s的值是

(A)0 (B)1 (C)True (D)False

3.下列VB程序模块

If n<=1 then

f=1

Else

f=n*f(n-1)

End if

End function

该模块采用的算法是

A.枚举 B. 查找 C. 排序 D.递归

4.任意输入n(n<=37000),计算1-4+7-…+(n*3-2)*(-1)(n+1)的数值Visual Basic程序代码如下:

Function jc(k as long) as long

If k mod 2=0 then jc=(k*3-2)*(-1) else jc=k*3-2

End function

Private sub Command1_click()

Dim s as long,I as long

N=val(text1.text)

s=0

For i=1 to n

s=s+ ____________

Next i

End sub

划线处的选项是()

A.J*3-2

B. (i*3-2)*(-1)^i

C. jc(i)

D. jc((i*3-2)*(-1)^(i+1))

5.【201608温模拟卷】某VB程序使用了递归函数,代码如下:

Private sub Command1_click( )

Text1.text=f(3)

End sub

Function f(x as integer) as string

If x=1 then f=1 else f=f(x-1)+2

End function

运行程序并点击按钮Command1后,文本框Text1中显示的内容是: A. 1 B. 3 C. 5 D. 7 6.【201608绍兴模拟卷】某VB 程序代码如下: Dim n as integer

Function f(k as integer) as long

If k<=2 then f=1 else f=f(k-1)+f(k-2) End Function

Private Sub Command1_Click( ) n=val(text1.text)

Label2.caption=str(f(n)) End Sub

该VB 程序采用的主要算法是:

A .枚举 B. 查找 C. 排序 D.递归 7.上题如果在text1中输入5,则label2中最后显示的是( ) A .str(f(n)) B. str(5) C. 5 D.10

8.【原创】某VB 程序代码如下,在text1中输入10,运行结果是( ) Function fact2(n As Integer) As String

If n = 1 Then fact2 = 1 Else fact2 = fact2(n \ 2) & n Mod 2 End Function

Private Sub Command1_Click() Dim x As Integer x = Val(Text1.Text) Text2.Text = fact2(x) End Sub

A .没有结果

B .text2中输出fact2(x)

C .text2中输出1010

D .程序出错

9.有如下VB 程序段:

Private Sub Command1_Click()

Dim nq As Long

nq = f(7)

Label1.Caption = Str(nq)

End Sub

Function f(n As Integer) As Long

If n = 1 Or n = 2 Then f = 1

If n > 2 Then f = 2 * f(n - 1) + f(n - 2)

End Function

A .17 B. 41 C. 99 D.239 第10题程序

10.(2013江苏12月学考)如下程序:(程序在上面右边)执行后,窗体上输出的是: A .s=s(5) B. s=1 C.s=120 D.s=s(n-1)*n

11.有一组数列1,4,7,10,13,……求前n 项的和,小明想用递归算法来完成,那么他设计的递推公式正确的是:( )

A. f(1)=1: f(n)=n*2-1

B. f(1)=1: (n)=n*2+1

C. f(1)=1: f(n)=n+3

D. f(1)=1: f(n)=f(n-1)+3

Private Sub Command1_Click() Print "s=" & Str(s(5)) End Sub Private Function s(n As Integer) As Integer If n = 1 Then s = 1 Else s = s(n - 1) * n End If End Function

12.(2013江苏12月学考)如下程序:

Private Sub Command1_Click()

Dim x As Integer

x = s(4)

Print x

End Sub

Private Function s(n As Integer) As Integer

If n = 1 Then

s = 1

Else

s = s(n - 1) + n

End If

End Function

程序运行时,单击按钮后,变量x

A .1 B. 4 C.10 D.36

13.有一段程序如第13A .1 B. 4 C.13 D.35

下列说法错误的是:

A . 函数调用gcd1(6,15)和gcd2(24,9)的结果是相等的

B . 函数调用gcd2(18,gcd2(24,9))的结果是3

C . 函数调用gcd2(18,gcd2(24,9))采用了递归算法

D . 函数gcd1采用了递归算法

阅读下列VB 程序中,完成15、16题 15.程序如下所示: Private Sub Command1_Click() Dim y As Long Text1.Text = "" y = f(3) Label1.Caption = Str(y) End Sub 程序运行时,单击命令按钮Command1后,文本框Text1中显示的内容是: A .3 B. 3 2 1 C. 1 2 3 D. 1

Function f(n As Integer) As Long Text1.Text = Text1.Text + Str(n) If n <= 1 Then f = 1 Else f = f(n - 1) + 2 End If End Function

16.程序运行时,单击命令按钮Command1后,文本框Label1中显示的内容是: A .f(3) B. f(1) C. 5 D. 1

17.有程序如下,下面说法正确的是:

Private Sub Command1_Click()

Dim sum As Integer, i As Integer

For i = 5 To 3 Step -1

sum = sum + fact(i)

Next i

Print "sum=" & sum

End Sub

A. 该程序采用了递归算法

B. 程序执行后,输出内容为:120

C. 程序执行后,输出内容为:sum=120

D. 程序执行后,输出内容为:sum=150

18. 有程序如下,下面说法正确的是: (注意17、18题逻辑上是一样的代码,结果却不同) Private Sub Command1_Click()

Dim sum As Integer, i As Integer

Dim k As Integer

For i = 5 To 3 Step -1

k = i

sum = sum + fact(k)

Next i

Print "sum=" & sum End Sub

A. 该程序采用了递归算法

B. 程序执行后,输出内容为:120

C. 程序执行后,输出内容为:sum=120

D. 程序执行后,输出内容为:sum=150 19.下面程序执行后,输出的i 的值是: Private Sub Command1_Click() Dim sum As Integer, i As Integer For i = 5 To 4 Step -1 sum = sum + fact(i) Print i Next i End Sub A .3 B. 2 C.1 D. 0

20. 下面程序执行后,输出的i 的值是: Private Sub Command1_Click() Dim sum As Integer, i As Integer For i = 5 To 4 Step -1 sum = sum + fact(i) Print i Next i End Sub A .3 B. 2 C.1 D. 0

请根据17到20题,是要告诉同学们,函数除了返回结果之外,同时还会将参数也传递回去的,所以,这点要务必注意。

Function fact(n As Integer) As Integer fact = 1 Do While n > 0 fact = fact * n n = n - 1 Loop End Function Function fact(n As Integer) As Integer

fact = 1

Do While n > 0

fact = fact * n

n = n - 1

Loop

End Function

Function fact(n As Integer) As Integer fact = 1 Do While n > 0 fact = fact * n n = n - 1 Loop End Function Function fact(n As Integer) As Integer fact = 1 Do While n >2 fact = fact * n n = n - 1 Loop End Function

函数类的题目需要继续补充:如递归的,函数参数传递的等等

计算整数a的近似算术平方根算法如下:,......

3,2,1

)

(1

1

=

+

=

+

i

x

x

i

a

i

i

先取x1=1,然后通过上述公式计算x2,再有x2计算x3,……,知道|x i-x i-1|<0.00001,则x i为解。

递归算法:

Function fun(x As Integer, x0 As Double) As Double

Dim x1 As Double

x1 = (x0 + x / x0) / 2

1.请在①划线处填写合适的代码

2.上述程序虚线框处采用的算法是:__________,②处的代码作用是:______________

②处语句改成b=int((b*100)+________)/100可以实现和②处语句相同的功能。

3.小王在测试程序是发现结果都只有2位小数,要想保留3位小数,哪条语句需要修改,

请写出修改后的代码。_____________________________________________________ Private Sub Command2_Click() '递归算法

Dim a As Integer, b As Double

a = Val(Text3.Text)

b = fun(a, 1)

b = Int((b + 0.005) * 100) / 100 '②

Text4.Text = Str(b)

End Sub

用递归将10进制转成2进制

Function fact2(n As Integer) As String

If n = 1 Then ‘三个转换这里判断为何不同fact2 = 1

Else

fact2 = fact2(n \ 2) & n Mod 2

End If

End Function

Private Sub Command1_Click()

Dim x As Integer

x = Val(Text1.Text)

Text2.Text = fact2(x)

End Sub

用递归将10进制转成8进制

Function fact8(n As Integer) As String

If n <= 7Then

fact8 = n

Else

fact8 = fact8(n \ 8) & n Mod 8

End If

End Function Private Sub Command2_Click()

Dim x As Integer

x = Val(Text1.Text)

Text2.Text = fact8(x)

End Sub

用递归将10进制转成16进制Function fact16(n As Integer) As String If n <= 15 Then

If n < 10 Then

fact16 = 1

Else

fact16 = Chr(55 + n)

End If

Else

fact16 = fact16(n \ 16) & n Mod 16 End If

End Function

Private Sub Command3_Click()

Dim x As Integer

x = Val(Text1.Text)

Text2.Text = fact16(x)

End Sub

相关主题
文本预览
相关文档 最新文档