递归算法 知识点题库

有如下程序段:

Dim a(4) As Integer

Private Sub Command1_Click()

 Dim s As String

a(1)=10:a(2)=30:a(3)=20:a(4)=40

 s=doit(4)

 Label1.Caption=s

End Sub

Function doit(k As Integer) As String

 If k=1 Then

  doit=Str(a(1))

  Else

  doit=doit(k-1) & Str(a(k))

 End If

End Function

程序运行后,标签Label1中显示的内容是(  )

A . 10 20 30 40 B . 10 30 20 40 C . 40 30 20 10 D . 40 20 30 10
有如下VB程序段:

Dim i As Integer, sum As Integer

Dim a(1 To 6) As Integer, b(1 To 6) As Integer

sum = 0

a(6) = 18: a(5) = 7: b(6) = 14: b(5) = 16

For i = 4 To 1 Step -1

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

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

 If b(i) Mod 3 = 0 Then sum = sum + b(i)

Next i

Text1.Text = Str(sum)

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

A . 39 B . 30 C . -9 D . 12
如果数组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 Command 1 click()

     Label 1.caption=““峰顶”值是:” +Str(Search (1,10))

End Sub

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

①Search=Search(M+1,R)

②Search=Search(L,M-1)

③Search=a(M)

则①②③处的语句依次是(  )

A . ①②③ B . ①③② C . ③①② D . ②③①
执行以下代码,单击命令按钮Command1后,显示在窗体上第二行的内容是(  )

Private Sub Command1_Click()

Dim n As Integer, m As Integer

n=2: m=0

Do While m<3

n=n+2

If fun(n) Then

Print n

m=m+1

End If

Loop

End Sub

Function fun(x As Integer) As Boolean

fun=False

If x/2=Int(x/2) Then

fun=fun(x/2)

Else

If x=1 Then fun=True

End If

End Function

A . 4 B . 6 C . 8 D . 16
有8阶楼梯,从第0阶开始往上走,每次可以走一步或者两步,自定义函数fg可以计算走完n阶楼梯有多少种走法,程序如下:

Function fg(n As Integer)As Integer

If n=1 fg=1

If n=2 fg=2

If n>=3 fg=fg(n-1)+fg(n-2)

End Function

请问走完这8阶楼梯的走法有(  )

A . 34种 B . 35种 C . 36种 D . 37种
有如下 VB 程序段:

Private Sub Command1_Click()

Dim i As Integer,s As string

s = ""

For i = 1 To 3 Step 2

 s = str(f(i)) + s

Next i

Text1. Text = s

End Sub

Function f(n As Integer) As Integer

If n = 1 Then

 f = 2

Else

 f = f(n - 1) + n

End If

End Function

则执行该程序段后,s 的值为(  )

A . 247 B . 27 C . 72 D . 742
递归的要素:的递归的重要组成;,它保证递归能在的计算后得出结果,而不会产生的情况。
递归的基本思想是把的问题层层转化为规模较小的问题求解。对递归而言,,二者缺一不可。
递归的边界条件要素,是为了保证递归能在有限次的计算后得出结果,而不会产生无限循环的情况。
有如下 VB 程序段:

Dim n As Integer

Dim sum As Integer

Dim i As Integer

Function fx(i As Integer) as Integer

  If i = 1 Then

    fx = 5 

  Else

    fx = 5 * 2 ^ (i - 1) + fx(i - 1)

  End if

End Function

Private Sub Command1_Click()

  n = Val(Text1.Text): sum = 0

  For i = 1 To n

    sum = sum + fx(i)

  Next i

  Label1.Caption = Str(sum)

End Sub

若在 Text1 中输入4,单击 Command1,则 Label1 中显示的内容为(    )

A . 55 B . 75 C . 80 D . 130
有如下VB程序段,执行该程序段后,Text1中显示的值为(  )

Function f(n As Integer)As Integer

  If n<=1 Then

      f=1

  Else

      f=n*f(n-1)

  End If

End Function

Private Sub Command1_Click( )

  Text1.Text=Str(f(5))

End Sub

A . 10 B . 60 C . 120 D . 140
斐波那契数列又称黄金分割数列,指的是这样一个数列:0,1,1,2,3,5,8,13,21,34……在数学上,斐波那契数列以下面的方法来定义:

F(0)=0 (n=0)

F(1)=1 (n=1)

F(n)=F(n-1)+F(n-2) (n≥2)

输出斐波那契数列中第10个数的Python程序如下:

def fib(n):

    a,b= 0,1

    for i in range(n):

       

return a

print(fib(10))

关于加框处的代码,下列说法正确的是(     )

A . 最多执行1次 B . 最多执行9次 C . 交换a和b的值 D . 从数列中的第三项起,每一.项都是它 相邻的前两项之和
下列对递归思想的形象化表示错误的是(   )。
A . B . C . D .
关于“递归”,下列说法不正确的是(    )
A . 可以利用“递归”进行具有自相似性无限重复事物的定义 B . 可以利用“递归”进行具有自重复性无限重复动作的执行,即“递归计算”或“递归执行” C . 可以利用“递归”进行具有自相似性无限重复规则的算法的构造 D . 递归算法的关键只要给出递归关系式即可求出问题的解
用递归求n!,当n=1时,f(1)=1,否则f(n)=f(n-1)*n,当n=3时,递归调用顺序正确的是(    )
A . f(1)、f(2)、f(3) B . f(2)、f(3)、f(1) C . f(3)、f(2)、f(1) D . 以上都不对
现有18枚硬币,18枚硬币中有一个是伪造的,并且那个伪造的硬币比真的硬币要轻。有一台用来比较两组硬币重量的仪器,使用递归及分治法设计一个算法,找出那枚伪造的硬币。阅读下列程序代码。

def check3(a,right,left):

    b=(left-right+1)//3

    if right==left:

        index=right+1

        return index

    elif right+1==left:

        if a[right] < a[left]:

            index=right+1

            return index

        else:

            index=left+1

            return index

    else:       

        if sum(a[right:right+b]) == sum(a[right+b:right+2*b]):

            return check3(a,right+2*b,left)                       

        elif sum(a[right:right+b]) > sum(a[right+b:right+2*b]):   

            return check3(a,right+b,right+2*b-1)                

        else:

            return check3(a,right,right+b-1)                   

a = [1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1]

index1=0

right0 = 0

index1= check3(a,right0,len(a))

print("你要找的假币在第",index1,"个位置")

input("运行完毕,请按回车键退出...")

假设列表a中,0表示伪造的硬币,下列说法正确的是(     )

A . 此程序递归部分为三分法递归查找伪造的硬币 B . sum(a[right:right+b])==sum(a[right+b:right+2*b])表示第二组的重量与第三组重量相同 C . 此程序递归部分为二分法递归查找伪造的硬币 D . 以上都不对
某同学在VB中编写了如下程序:

Private Sub Command1 Click()

    Label2 Caption = trans(Val(Text1. Text),Val(Text2. Text))

End Sub

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

    If n< >0 Then

        r = n Mod k

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

    Else trans = 0

    End If

End function

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

A . 102 B . 201 C . 3 D . 113
在汉诺塔问题中,现要将塔座A上的8个圆盘全部移到塔座B上,并仍按同样顺序叠放。移动圆盘时,需遵守汉诺塔问题的移动规则。由此,可设计出解汉诺塔问题的递归算法为(     )。
A . def hanoi(n,A,C,B):

if n>0:

hanoi(n-1,A,B, C)

print(n,A,"->”,B)

hanoi(n-1,C,A,B)

hanoi (8,A,C,B)

B . def hanoi(n,A,B,C):

if n>0:

hanoi(n-1,A,B,C)

print(n, A,"->" ,B)

hanoi(n-1,C,A,B)

hanoi (8, A,B,C)

C . def hanoi (n,C,B,A):

if n>0:

hanoi(n-1,A,C,B)

print(n, A,"->”,B)

hanoi(n-1,C,B,A)

hanoi (8, C, B,A)

D . def hanoi(n,A,C,B):

if n>0:

hanoi (n-1,A,C,B)

print(n, A,"->,B)

hanoi(n-1,C,B, A)

hanoi(8,C,A,B)

用递归求n!,当n=1时,f(1)=1,否则f(n)=f(n-1)*n.当n=3时,递归调用顺序正确的是(      )
A . f(1)、f(2)、f(3) B . f(2)、f(3)、f(1) C . f(3)、f(2)、f(1) D . 以上都不对
下列VB程序运行时,单击命令按钮Command1后,文本框Text1中显示的内容是,文本框Text2显示的内容是

Private Sub Command1_ Click( )

    Dim a(1 To 6) As Long,i As Integer

    a(1)=1

    a(2)= 1

    For i=3 To 6

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

    Next i

    Text1. Text=Str(a(6))

    Text2. Text= Str(i)

End Sub