MOOC 数据结构 第六周

1.一个正确的递归算法通常包含( C)。
A.递归出口
B.递归体
C.递归出口和递归体
D.以上都不包含
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)的值是( D)。
A.1
B.2
C.3
D.4
3.某递归算法的执行时间的递推关系如下:
T(n)=1 当n=1时
T(n)=T(n/2)+1 当n>1时
则该算法的时间复杂度为( B)。
A.O(1)
B.在这里插入图片描述

C.O(n)
D.在这里插入图片描述
4.某递归算法的执行时间的递推关系如下:
T(n)=1 当n=1时
T(n)=2T(n/2)+1 当n>1时
则该算法的时间复杂度为( C)。
A.O(1)
B.在这里插入图片描述

C.O(n)
D.
5.将递归算法转换成非递归算法时,通常要借助的数据结构是( B)。
A.线性表
B.栈
C.队列
D.树
1 .两个非负整数a和b相加时,若b为0,则结果为a,利用C/C++语言中“++”和“–”运算符其递归定义。
f(a,0)=a;
f(a,b)=f(++a,–b);

#include <iostream>
using namespace std;
int f(int a,int b)
{
    
    
	if(b==0) return a;
	else f(++a,--b);
}
int main()
{
    
    
	int a,b;
	cin>>a>>b;
	cout<<f(a,b);
	return 0;
}

2 .有如下递归函数:
double pow(double x,int n)
{ if (n==1) return x;
return x*pow(x,n-1);
}
(1)pow(x,n)的功能是什么?
(2)执行pow(2,5)的结果是什么?其执行过程中发生了几次递归调用(含pow(2,5)调用)?
(3)执行pow(x,n)最多发生了几次递归调用(含pow(x,n)调用)?
(1)计算x的n次方。
(2)32。5次。
(3)n次。
3 .设计一个递归算法求一个实型数组a[0…n-1]的平均值。

#include <iostream>
using namespace std;
double f(int a[],int n)
{
    
    
	if(n==0) return a[0];
	else return (a[n]+n*f(a,n-1))/(n+1);
}
int main()
{
    
    
	int a[10],n,i;
	cin>>n;
	for(i=0;i<=n;i++)
	cin>>a[i];
	cout<<f(a,n);
	return 0;
}

4 .有一个不带表头节点的单链表,其节点类型为LinkList。设计一个递归算法,删除以h为首指针的单链表中第一个值为x的节点。

void delet(LinkList *pre,LinkList *h,ElemType x)
{
    
    
	LinkList *s;
	if(h==NULL) return;
	if(h->data==x)
	{
    
    
		s=h;
		h=h->next;
		pre->next=h;
		free(s);
		return;
	}
	else
	{
    
    
		delet(pre->next,h->next,x);
		return;
	}
}

5 .有一个不带表头节点的单链表,其节点类型为LinkList。设计一个递归算法,删除以h为首指针的单链表中值为x的所有节点。

void delet(LinkList *pre,LinkList *h,ElemType x)
{
    
    
	LinkList *s;
	if(h==NULL) return;
	if(h->data==x)
	{
    
    
		s=h;
		h=h->next;
		pre->next=h;
		free(s);
		delet(pre,h,x);
	}
	else
	{
    
    
		delet(pre->next,h->next,x);
		return;
	}
}

猜你喜欢

转载自blog.csdn.net/weixin_46226815/article/details/107764098