递归算法 知识点题库

【加试题】有如下VB程序段:

  a(1)=1:a(2)=1

  b(1)=1:b(2)=2

  For i=3 To 5

a(i)=a(i-1)+a(i-2)

b(i)=b(i-1)+a(i)

Next i

执行该程序段后,数组元素b(5)的值为(  )

A . 12 B . 8 C . 5 D . 4
【加试题】有如下VB程序:

  Function f(n As Integer)As Long

    Text1.Text=Trim(Str(n))+Text1.Text             ‘函数Trim的作用是去掉字串首尾空格

    If n=1 Then

       f=1

    Else

       f=3*f(n\2)

    End If

  End Function

  Private Sub Command1_Click()

    Text1.Text=“”

    Text1.Text=Trim(Str(f(8)))+Text1.Text

  End Sub

单击按钮Command1后,文本框Text1中显示的值是(  )

A . 31248 B . 811248 C . 842127 D . 271248
【加试题】某同学用VB编写如下程序:

  Private Sub Command1_Click()

    Dim k As Integer,a As Integer,b As Integer

    a=Val(Text1.Text)

    b=Val(Text2.Text)

    Label1.Caption=trans(a,b)

  End Sub

  Function trans(m As Integer,n As Integer)As String

    If m<>0 Then

       r=m Mod n

       trans=trans(m\n,n)+Str(r)

    Else

      trans=0

     End If

    End Function

程序运行时,在文本框Text1和Text2中分别输入11和2,则Label1中的输出结果是(  )

A . 01011 B . 1011 C . 01101 D . 11010
【加试题】某个进行素数判断的VB程序段如下:

Private Sub Command1_Click()

    Dim x As Integer

    x=Val(Text1.Text)

    Label1.Caption=Str(x) & prime(x,2)

End Sud   

Function prime(n A Integer m A Integer)As String

    If n=m Then

        prime=“是素数。”

    ElseIf n<2 Or n Mod m=0 Then

        prime=“不是素数。”

    Else

    prime=prime(n,m+1)

End If

End Function

在文本框Text1中输入的值是123,并执行程序后,自定义函数prime( )被执行的次数是(  )

A . 1次 B . 2次 C . 122次 D . 123次   
已知斐波那契数列前8项是1,1,2,3,5,8,13,21,设计如下VB程序求其第n项的值:

Dim a(1 to 1000)as long, n as integer

n=Val(Text1.Text)

a(1)= 1:a(2)= 1

For i=3 to n

  a(i)= a(i-1)+a(i-2)

Next i

Label1.Caption=“斐波那契的第”&Str(n)&“是”&a(n)

该程序用到了下列哪一个算法(  )

A . 枚举算法 B . 递归算法 C . 排序算法 D . 查找算法
下列VB程序段:

Function s(n As Integer) As Integer

 If n=1 Then

   s=1

 Else

   s=s(n-1)+n

 End If

End Function

Private Sub Form_Click()

 Dim x As Integer

 x=s(4)

 Print x

End Sub

程序运行时,单击窗体后,变量x的值为(  )

A . 1 B . 4 C . 10 D . 36
有如下VB程序。

Function f(i As Integer)

    If i=1 Then

      f=2

    Else

      f=2 * 10 ^ (i-1)+f(i-1)

    End If

End Function

Private Sub Command1_Click()

    Dim n As Integer, s As Integer, i As Integer

    n=Val(Text1.Text)

    s=0

    For i=1 To n

      s=s+f(i)

    Next i

    Label1.Caption=Str(s)

End Sub

若在Text1中输入5,则Label1显示的内容为(  )

A . 22222 B . 24690 C . 20000 D . 2468
有如下 VB 程序段:

Function fact(n As Integer) As String

If n = 1 Then

    fact = fact & 1

Else

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

End If

End Function

Private Sub Command1_Click()

Dim x As String, i As Integer, r As Integer

x = Text1.Text

For i = 1 To Len(Text1.Text)

If Mid(x, i, 1) = "." Then Exit For Next i

r = Val(Mid(x, i + 1, Len(Text1.Text) - i)) Text2.Text = fact(r)

End Sub

在文本框Text1中输入2019.70,则执行程序段,在文本框Text2中显示的内容是(  )

A . 1000110 B . 70 C . 350 D . 100011
下面VB程序段运行后,文本框Text1和Label1显示的内容分别是(  )

Private Sub Command1_Click()

  Dim y As Long

  Text1.Text = ""

  y = f(3)

  Label1.Caption = Str(y)

End Sub

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

A . 3 2 1和5 B . 1 2 3和5 C . 5和3 2 1 D . 6和3 2 1
如果数组a(下标1到n)满足a(1)≤a(2)≤…≤a(i-1)≤a(i)≥a(i+1)≥…≥a(n),则称数组a是单峰的,并称a(i)是数组a的“峰顶”。下列程序段用于查找数组a中的“峰顶”,并返回该“峰顶”值。

Dim a(1 To 10) As Integer

Function Search(L As Integer, R As Integer) As Integer

 M = (L + R) \ 2

 If a(M) < a(M - 1) And a(M) > a(M + 1) Then

     ⑴  

 ElseIf a(M) > a(M - 1) And a(M) > a(M + 1) Then

     ⑵  

 ElseIf a(M) > a(M - 1) And a(M) < a(M + 1) Then

    ⑶  

 End If

End Function

Private Sub Command1_Click()

 Label1.Caption = "“峰顶”值是:" + Str(Search(1, 10))

End Sub

上述程序中划线处可选语句为:

①Search = Search(M + 1 , R)

②Search = Search(L , M - 1)

③Search = a(M)

则(1)(2)(3)处的语句依次是(  )

A . ①②③ B . ①③② C . ③①② D . ②③①
有如下 VB 程序段:

Function t(x As Integer) As Long

  If x = 1  Then t = 1

    ElseIf x = 2  Then

      t = 2

    Else

    t = t(x - 1) + t(x - 2)

  End If

End Function

Text1.Text = Str(t(8))

执行该程序段后,文本框 Text1 中显示的内容是(   )。

A . 21 B . 34 C . 55 D . 89
有如下VB程序其功能是实现正话反说(即将输入字符逆序输出):

Function ZF(S As String) As String

Dim n As Integer

n = Len(S)

If     ⑴     Then

ZF =   ⑵  

Else

 ZF = Mid(S, n, 1) + ZF(Mid(S, 1, n - 1))

End If

End Function

Private Sub Command2_Click()

Dim x As String

x = Text1.Text

Text2.Text = ZF(x)

End Sub

该程序采用的算法和划线处应该填入的内容分别为(  )

A . 解析(1) n<=1(2) s B . 解析(1) n>=1(2) Mid(s, n, 1) C . 递归(1) n>=1(2) s D . 递归(1) n<=1(2) Mid(s, n, 1)
迭代算法与递归算法都需要某些代码,两者既有区别又有密切的联系。迭代是重复的活动,其目的通常是逼迫,其结束方式,通常使用结束循环。递归的重复方式是重复,其结束方式是遇到的情况时逐层返回。
数列1,4,7,10,13,…的递推公式为(  )
A . f(1)=1:f(n)=n+3 B . f(1)=1:f(n)=n*2-1 C . f(1)=1:f(n)=n*2+1 D . f(1)=1:f(n)=f(n-1)+3
求两个整数的最大公约数可以使用递归算法实现,程序运行界面如图所示。在文本框Text1中输入两个数字中较大的数字m,在Text2中输入较小的数字n,单击Command1按钮,在Text3中显示数字m和n的最大公约数。可实现该目的的VB程序如下,请在画线处填入合适的代码。

Private Sub Command1_Click( )

  Dim m,n As Integer

  m=Val(Text1.Text)

  n=Val(Text2.Text)

  Text3.Text=   ①   

End Sub

Function gcd(x, y As Integer)As Integer

  Dim z As Integer

  z=x Mod y

  If z=0 Then

    gcd=   ②   

  Else

    gcd=gcd(y, z)

  End If

End Function

以上程序段运行时,为了实现上述功能,画线处应填入的代码分别为:①;②

迭代法是用计算机解决问题的一种基本算法,它利用计算机运算速度快、适合做重复性操作的特点,让计算机对一组指令(或一定步骤)进行重复执行,在每次执行这组指令(或这些步骤)时,都从变量的原值推出它的一个新值。关于迭代法,下列描述正确的是(   )。
A . 每一次的迭代进行,肯定是离最终的正确结果越来越近 B . 每一次的迭代结果,其实质就是下一次运算的初始值 C . 如果没有正确结果,迭代次数可以无止境的进行下去 D . 迭代的计算结果肯定比数学公式计算精确
递归也可用“分”“治”“合”三个字概括。下列说法错误的是(    )
A . 分:将原问题分解成k个子问题 B . 治:对这k个子问题分别求解,如果子问题的规模仍然不够小,则将其再分解为k个子问题,如此进行下去,直到问题足够小时,就很容易求出子问题的解 C . 合:将求出的小规模问题的解合并为一个更大规模问题的解自下而上涿步求出原问题的解 D . 整个递归不需要终止条件,自动返回运算结果
(   )是重复反馈过程的活动,其目的通常是逼近所需目标或结果。是直接或间接地调用函数自身。
A . 枚举  递归 B . 枚举  迭代 C . 迭代  递归 D . 递归  迭代
某VB程序如下:

Function fx(n As Integer) As Long

    If n=1 Then

        fx=2

    Else

        fx=2+fx(n-1)

    End If

End Function

Private Sub Command1_ Click()

    Dim x As Integer, y As Integer

    x=va1(Text1. Text)

    y=fx(x)

    Text2. Text= Str(y)

End Sub

程序运行时,在文本框Text1中输人数字10,单击命令按钮后,在Text2显示内容为(    )

A . 2 B . 18 C . 20 D . 22
小方同学在某网站注册时需要预设登录密码,预设密码需要符合以下2点:①密码不少于6位字符组成;②必须同时包含大写英文,字母、小写英文字母、阿拉伯数字和标点符号。据此,该同学编写了生成密码的VB程序,程序运行界面如图a所示,当点击“生成密码”按钮( command1)时,在文本框Text1中输出符合要求的密码字符

图b为标准ASCII码表供你参考(其中ASCII为1-32,127的字符为特殊符号,不能用作密码):

实现上述功能的VB程序代码如下,请回答以下问题:

  1. (1) 请在划线处填入合适的代码。

    Private Sub Command1_Click() 

        Dim t As Integer, flag as Boolean

        Dim pwd as String ,n as Integer

        Dim a(1 To 4) As Integer

        flag= True

        n=0

        pwd=" "

        Randomize

        Do While flag

            t=             '随机生成33~126的ASCII码

            pwd= pwd+Chr(t)

            s= 0

            For i=1 To 4

                s=s+a(i)

            Next i

            n=n+1

            If n>=6 And s=4 Then

        Loop

        Text1. Text= pwd

    End Sub

    '获取字符类型:1-小写字母,2-大写字母,3-阿拉伯数字,4-符号

    Function check(x As Integer) As Integer

        If x>=97 And x <= 122 Then

            check= 1

        ElseIf x >=65 And x <=90 Then

            check= 2

        ElseIf x>=48 And x <=57 Then

            check= 3

        Else

            check= 4

        End If

    End Function

  2. (2) 以下字符串不可能是上述程序生成的密码的一项是(填数字序号)

    ①H2? N64Aj

    ②[26wv9,Q

    ③$ 14G/uv④zX}rb! T&}d2