1单选(2分)一个正确的递归算法通常包含( )。
A.递归出口
B.递归体
C.递归出口和递归体
D.以上都不包含
正确答案:C
解析: C、正确的递归算法应包含递归出口和递归体两部分,缺一不可。
课本考据:递归算法设计的基本步骤是先确定求解问题的递归模型,在转换成对应的 C/C++语言函数。而一个递归体模型由递归出口(确定结束条件)和递归体(确定递推关系)两部分组成。
2单选(2分)递归函数f(x,y)定义如下:
f(x,y)=f(x-1,y)+f(x,y-1) 当x>0且y>0
f(x,y)=x+y 否则
则f(2,1)的值是( )。
A.1
B.2
C.3
D.4
正确答案:D
解析: D、f(2,1)=f(1,1)+f(2,0)=f(0,1)+f(1,0)+2=1+1+2=4。
3单选(2分)某递归算法的执行时间的递推关系如下:
T(n)=1 当n=1时
T(n)=T(n/2)+1 当n>1时
则该算法的时间复杂度为( )。
A.O(1)
B.O(log2n)
C.O(n)
D.O(nlog2n)
正确答案:B
解析: B、不妨设n=2^k,k=log2n。
T(n)=T(n/2)+1= T(n/22)+2=…= T(n/2k)+k=T(1)+log2n=O(log2n)。
4单选(2分)某递归算法的执行时间的递推关系如下:
T(n)=1 当n=1时
T(n)=2T(n/2)+1 当n>1时
则该算法的时间复杂度为( )。
A.O(1)
B.O(log2n)
C.O(n)
D.O(log2n)
正确答案:C
解析: C、不妨设n=2^k,k=log2n。
T(n)=21*T(n/21)+1=22*T(n/22)+1+21=…=2kT(n/2k)+1+21+…+2(k-1)=2kT(1)+2k-1=2n-1=O(n)。
5单选(2分)
将递归算法转换成非递归算法时,通常要借助的数据结构是( )。
A.线性表
B.栈
C.队列
D.树
正确答案:B
解析: B、递归算法转换成非递归算法时通常使用栈。
课本考据:大多数CPU上的程序实现使用栈来支持函数调用操作。