递归练习题(新、选)
《数据结构与算法》期末练习题1

一、选择:(每题2分,共30分) 简单选择排序 冒泡排序 归并排序 稳定1、下列排序算法中,其中( )是稳定的。
堆排序 希尔排序 快速排序 基数排序 不稳定A) 堆排序,冒泡排序 B) 快速排序,堆排序 C) 直接选择排序,希尔排序 D) 归并排序,冒泡排序 2、下列排序方法中,哪一个是稳定的排序方法?( )A)堆排序 B)二分法插入排序 C)希尔排序 D)快速排序3、一个栈的输入序列为1 2 3 4 5,则下列序列中不可能是栈的输出序列的是( )。
A) 2 3 4 1 5 B) 5 4 1 3 2 C) 2 3 1 4 5 D) 1 5 4 3 2 4、非空循环链表head 的尾结点 *p 满足下列( )条件A)head->next==p; B)head==p; C)p->next==head; D)p->next==0 5、下列编码中属前缀码的是( )A){1,01,000,001} B){1,01,011,010} C){0,10,110,11} D){0,1,00,11} 6、对于哈希函数H(key)=key % 7,被称为同义词的关键字是( )A)36和50 B)23和39 C)15和44 D)25和517、将一个长度为n 的向量的第i 个元素删除时,需要前移( )个元素。
A) i B) n-i C) n+1 D) n-i+18、有一个有序表为{ 1,3,9,12,32,41,45,62,77,88,92,100},用折半查找法,若要找62,要经过( )次比较。
A. 3 B. 6 C. 4 D. 5 9、高度为 K 的二叉树最大的结点数为( )。
A)2k B)2k-1 C)2k -1 D)2k-1-110、对表长为n 的顺序表进行顺序查找,在查找概率相等的情况下,查找成功的平均查找长度为( )A) (n-1)/2 B) n/2 C) (n+1)/2 D) n11、如果求一个连通图中以某个顶点为根的高度最小的生成树,应采用( )A)深度优先搜索算法 B)广度优先搜索算法 C)求最小生成树的prim 算法 D)拓扑排序算法12、已知有向图的正邻接链表的存储结构如下,从顶点1出发的按深度优先遍历序列是( )。
4.1 算法及其特征(同步练习)-高中信息技术教科版(2019)必修1

4.1 算法及其特征(同步练习)-高中信息技术教科版(2019)必修1一、选择题1.下列关于算法描述错误的是( )A.算法是有限步骤内解决问题的方法B.算法必须具有可行性C.一个算法必须要有一个输入D.算法可以有多个输出2.下列关于算法的描述正确的是( )A.算法只能用流程图来表示B.一个算法,当没有输入时,也没有输出C.一个算法的执行步骤可以是无限的D.一个算法可以没有输入3.关于算法的基本特征,下列描述正确的是( )A.有0个或多个输入B.无输出C.无穷性D.不确定性4.通过列举所有的可能进行密码破解,用到的算法是( )A.递推B.递归C.穷举D.分治5.流程图符号,菱形的名称是( )A.判断框B.处理框C.输入/输出框D.起止框6.以下流程图描述的算法执行结果是( )A.10B.25C.30D.557.下列关于算法和程序设计语言之间关系的说法,正确的是( )A.算法独立于程序设计语言,可以由多种程序设计语言来实现B.程序设计语言与算法是一一对应的,每种算法由特定的程序设计语言来实现C.当我们设计算法时,需要优先考虑由哪种程序设计语言来实现D.评价一种算法的优劣,主要看能否被任何程序设计语言轻松实现8.如下图所示,该流程图不符合算法特征中的( )A.有穷性B.确定性C.有0个或多个输入D.有1个或多个输出9.算法的重要特征不包括( )A.唯一性B.确定性C.可行性D.有穷性10.某算法的流程图如图所示,若输入x的值为26,则下列说法正确的是( )A.变量x的终值可能为负数B.语句"x←x//2"共执行5次C.语句"x>0?"共执行5次D.输出变量s值为"01011"二、填空题11.递归的要素:________的递归的重要组成;________,它保证递归能在________的计算后得出结果,而不会产生________的情况。
12.递增数列用二分法查找时,先以________位置的元素作为比较对象,如果要找的元素值小于该中点元素,则将待查序列________为左半部分,否则为右半部分。
数据结构习题

一、单项选择题1.下面程序段的时间复杂度为( C ) 。
for(int i=0; i<m; i++)for(int j=0; j<n; j++)a[i][j]=i*j;A. O(m2) B. O(n2) C. O(m*n) D. O(m+n) 2.设有一个递归算法如下int fact(int n){串的长度 B.原串的子串 C.串的模式匹配 D.串的连接3.设有一个n×n的对称矩阵A,将其上三角部分按行存放在一个一维数组B中,A[0][0]存放于B[0]中,那么第i行的对角元素A[i][i]存放于B 中( C )处。
A.(i+3)*i/2 B.(i+1)*i/2 C.(2n-i+1)*i/2 D.(2n-i-1)*i/24.在( C )运算中,使用顺序表比链表好。
5.A.插入B.删除C.根据序号查找 D.根据元素值查找6.带头结点的单链表head为空的判断条件是( C )。
7.A.head= =NULL B.head->next= =NULLC.head->next=head D.head!=NULL8.设一个链表最常用的操作是在末尾插入结点和删除尾结点,则选用( C )最节省时间。
A)单链表 B)循环链单表 C)带尾指针的循环链单表 D)带头结点的双循环链表9.栈的插入与删除操作在(A )进行。
A.栈顶 B.栈底 C.任意位置 D.指定位置10.设一个栈的输入序列为A、B、C、D,则借助一个栈所能得到的输出序列不可能是( D )。
11.A.ABCD B.DCBA C.ACDB D.DABC12.在一个链队中,假设F和R分别是队首和队尾指针,则删除一个结点的运算是( C )。
13.A.R=F->next; B.R=R->next; C.F=F->next; D.F=R->next;14.串是一种特殊的线性表,其特殊性体现在( B )。
15.A.可以顺序存储B.数据元素是一个字符16.C.可以链接存储D.数据元素可以是多个字符17.以下说法正确的是(C )。
时间复杂度练习题

时间复杂度练习题一、基础知识题1. 请简述时间复杂度的定义及其在算法分析中的重要性。
2. 常见的时间复杂度有哪些?请按从低到高的顺序排列。
4. 请举例说明一个O(n)时间复杂度的算法。
5. 如何计算一个循环语句的时间复杂度?二、选择题A. O(n^3)B. O(2^n)C. O(1)D. O(n!)2. 一个算法的时间复杂度为O(n),如果输入规模n增加10倍,其运行时间将如何变化?A. 减少到原来的1/10B. 增加到原来的10倍C. 增加到原来的100倍D. 不确定A. 二分查找B. 冒泡排序C. 快速排序D. 选择排序A. 遍历一个长度为n的数组B. 遍历一个长度为n的链表C. 遍历一个长度为n的数组,并对每个元素进行一次操作D. 遍历一个长度为n的数组,并对每对元素进行一次操作三、计算题for i in range(n):for j in range(n):print(i, j)for i in range(n):print(i)while head:print(head.val)head = head.next四、分析题def bubble_sort(arr):n = len(arr)for i in range(n):for j in range(0, ni1):if arr[j] > arr[j+1]:arr[j], arr[j+1] = arr[j+1], arr[j] def binary_search(arr, target):left, right = 0, len(arr) 1while left <= right:mid = (left + right) // 2if arr[mid] == target:return midelif arr[mid] < target:left = mid + 1else:right = mid 1def factorial(n):if n == 0:return 1else:return n factorial(n1)五、判断题1. 一个算法的时间复杂度与输入数据的顺序无关。
java 递归笔试题目

以下是一些可能的Java递归笔试题目:
1. 阶乘计算:
实现一个函数,使用递归计算给定数字的阶乘。
例如,factorial(5) 应返回。
java代码:
2. 斐波那契数列:
实现一个函数,使用递归计算斐波那契数列的第n项。
斐波那契数列的定义是:。
java代码:
3. 汉诺塔问题:
实现一个函数,使用递归解决汉诺塔问题。
给定三个柱子A、B、C和n个圆盘,开始时所有圆盘都在柱子A上,目标是将所有圆盘移动到柱子C上,遵循以下规则:
每次只能移动一个圆盘。
每次移动时,圆盘必须放在比它大的圆盘上面。
不允许将任何较大的圆盘放在较小的圆盘上。
java代码:
4. N个台阶的走法:
给定一个楼梯有N个台阶,每次可以跳上1阶或2阶,计算总共有多少种不同的走法。
java代码:
5. 树的深度优先搜索(DFS):
给定一个树的数据结构,实现一个函数,使用递归进行深度优先搜索。
java代码:
这些题目涵盖了基本的递归概念和应用,包括简单的数学问题、经典的递归
问题以及数据结构中的递归搜索。
在实际的笔试中,题目可能会包含更复杂的场景和限制。
c++练习题(带答案)

一、选择题1.C++语言属于( C )。
A)自然语言 B)机器语言 C)面向对象语言D)汇编语言2.下面选项中不属于面向对象程序设计特征的是(C) 。
A)继承性 B)多态性 C)相似性 D)封装性3.可用作C++语言用户标识符的一组标识符是( B )。
A) void define +WORD B) a3_b3 _123 YNC) for -abc Case D) 2a DO sizeof4.假定一个二维数组的定义语句为“inta[3][4]={{3,4},{2,8,6}};”,则元素a[2][1]的值为(A)。
A) 0 B) 4 C) 8 D) 65.下列情况中,哪一种情况不会调用拷贝构造函数( B )?A)用派生类的对象去初始化基类对象时B)将类的一个对象赋值给该类的另一个对象时C)函数的形参是类的对象,调用函数进行形参和实参结合时D)函数的返回值是类的对象,函数执行返回调用者时6.以下哪一关键字可用于重载函数的区分(C)A)extern B)static C)const D)virtual7.下列有关数组的叙述中,正确的是( B )A)C++中数组的存储方式为列优先存储B)数组名可以作为实参赋值给指针类型的形参C)数组下标索引从1开始,至数组长度n结束D)数组指针的语法形式为:类型名 *数组名[下标表达式];8.下列有关继承和派生的叙述中,正确的是( C )A)派生类不能访问通过私有继承的基类的保护成员B)多继承的虚基类不能够实例化C)如果基类没有默认构造函数,派生类就应当声明带形参的构造函数D)基类的析构函数和虚函数都不能够被继承,需要在派生类中重新实现9.实现运行时多态的机制是( A )A)虚函数B)重载函数C)静态函数D)模版函数10.若有下面的函数调用:fun(a+b, 3, max(n-1, b));其中实参的个数是( A)A)3 B)4 C)5 D)611.下列关于this指针的说法正确的是( B)A)this指针存在于每个函数之中B)在类的非静态函数中this指针指向调用该函数的对象C)this指针是指向虚函数表的指针D)this指针是指向类的函数成员的指针12.在下列关于C++函数的叙述中,正确的是(C)A)每个函数至少要有一个参数B)每个函数都必须返回一个值C)函数在被调用之前必须先声明D)函数不能自己调用自己13.下列运算符中,不能重载的是(C)A)&& B)!= C). D)->14.下面程序的输出结果是(B)#include <iostream>using namespace std;int i = 0;int fun(int n){static int a = 2;a++;return a+n;}void main(){int k = 5;{int i = 2;k += fun(i);}k += fun(i);cout << k;}A)13 B)14 C)15 D)1615.下面的程序段的运行结果为(D)char str[] = "job", *p = str;cout << *(p+2) << endl;A)98 B)无输出结果 C)字符’b’的地址 D)字符’b’16.下面程序的输出结果是( C )#include <iostream>using namespace std;class A{public:A (int i) { x = i; }void dispa () { cout << x << “,”; }private :int x ;};class B : public A{public:B(int i) : A(i+10) { x = i; }void dispb() { dispa(); cout << x << endl; }private :int x ;};void main(){B b(2);b.dispb();}A)10,2 B)12,10 C)12,2 D)2,217.下面程序的输出结果是( C)?#include <iostream>using namespace std;class Base{public:Base(int i) { cout << i; }~Base () { }};class Base1: virtual public Base{public:Base1(int i, int j=0) : Base(j) { cout << i; }~Base1() {}};class Base2: virtual public Base{public:Base2(int i, int j=0) : Base(j) { cout << i; }~Base2() {}};class Derived : public Base2, public Base1{public:Derived(int a, int b, int c, int d) : mem1(a), mem2(b), Base1(c), Base2(d), Base(a){ cout << b; }private:Base2 mem2;Base1 mem1;};void main() { Derived objD (1, 2, 3, 4); }A)134122 B)123412 C)14302012 D)14321218.下面程序的输出结果是(C)#include <iostream>using namespace std;class Base{public:virtual void f() { cout << “f0+”; }void g() { cout << “g0+”; }};class Derived : public Base{public:void f() { cout << “f+”; }void g() { cout << “g+”; }};void main() { Derived d; Base *p = &d; p->f();p->g(); }A)f+g+ B)f0+g+ C)f+g0+ D)f0+g0+19.下面程序的输出结果是( C )#include <iostream>using namespace std;class Sample{friend long fun (Sample s){if (s.x < 2) return 1;return s.x * fun(Sample(s.x-1));}public:Sample (long a) { x = a; }private:long x;};void main(){int sum = 0;for (int i=0; i<4; i++){sum += fun(Sample(i));}cout << sum;}A)12 B)16 C)10 D)34 20.以下程序的输出结果是:(D)#include <iostream>using namespace std;int fun(char *s){ char *p=s;while (*p!='\0') p++;return (p-s);}void main(){cout<<fun("abc")<<endl;}A.0 B. 1 C. 2 D. 321.有如下程序段:int i=1;while(1){i++;if (i==10) break;if(i%2==0) cout<<’*’;}执行这个程序段输出字符*的个数是(C)A. 10B. 3C. 4D.522.下列关于虚基类的描述中,错误的是(C)A. 使用虚基类可以消除由多继承产生的二义性B. 构造派生类对象时,虚基类的构造函数只被调用一次C. 声明 class B:virtual public A 说明类B为虚基类D. 建立派生类对象时,首先调用虚基类的构造函数23.有下类定义Class A {Char *a;Public:A():a(0){}A(char *aa) {//把aa所指字符串拷贝到a所指向的存储空间A=___________________;Strcpy(a,aa);~A() {delete [] a;}};正确的选择是(A)A. new char[strlen(aa)+1]B. char[strlen(aa)+1]C. char[strlen(aa)]D. newchar[sizeof(aa)-1]24.假定AA为一个类,a为该类私有的数据成员,GetValue( )为该类公有函数成员,它返回a的值,x为该类的一个对象,则访问x对象中数据成员a的格式为(d )。
软件设计师基础知识(选择题)模拟试卷11(题后含答案及解析)

软件设计师基础知识(选择题)模拟试卷11(题后含答案及解析) 题型有:1.1.一般情况下,将递归程序转化成为非递归程序应该设置(1),但是消除(2)时不需要使用。
A.堆栈B.队列C.堆栈或队列D.数组正确答案:A2.A.直接递归B.间接递归C.尾递归D.递推正确答案:C解析:将递归程序转化成为非递归程时,一般需要设置栈。
但对于尾递归可将其转化成递推,不需要栈。
尾递归调用就是作为方法的最后一个操作出现的递归的方法调用。
例如:打印数组A[n]值的递归算法:void recfunc(int A[], int n){if(n>=0){cout<<A[n]<<”“;n--;|recfunc(A, n);} } 可以改写为:void iterfunc(int A[], int n){ //消除了尾递归的非递归函数while(n>=0){cout<<”value”<<A[n]<<endl;n--;} }3.堆排序是一种基于(1)的排序方法,(2)不是堆。
A.计数B.插入C.选择D.归并正确答案:C4.A.15,28,25,56,68,63,30B.15,28,25,30,68,63,56C.68,28,63,25,15,56,30D.68,56,39,63,28,25,15正确答案:D5.在关系模型的完整性约束中,实体完整性规则是指关系中(2)参照完整性规则要求(3)。
A.不允许有主行B.属性值不允许为空C.主键值不允许为空D.外键值不允许为空正确答案:B6.A.不允许引用不存在的元组B.允许引用不存在的元组C.不允许引用不存在的属性D.允许引用不存在的属性正确答案:A解析:数据库的完整性是指数据的正确性和相容性,即数据库中的数据始终保持正确的状态,防止不符合语义的错误数据的输入和输出。
关系模型中的完整性约束条件包括实体完整性、参照完整性和用户自定义完整性。
实体完整性规则:若属性A是基本关系R的主属性,则属性A不能取空值。
二级MS Office高级应用(新大纲)选择题题目、解析及答案(树、二叉树)

二级MS Office高级应用(新大纲)选择题题目、解析及答案(树、二叉树)1.某二叉树有5个度为2的结点,则该二叉树中的叶子结点数是()。
A)10B)8C)6D)4参考答案:C解析:二叉树中,叶子结点(度为0的结点)是度为2的结点个数加1。
2.下列数据结构中,属于非线性结构的是()。
A) 循环队列B) 带链队列C) 二叉树D) 带链栈参考答案:C解析:队列、栈是线性结构;树是非线性结构。
3.下列叙述中正确的是()。
A) 有一个以上根结点的数据结构不一定是非线性结构B) 只有一个根结点的数据结构不一定是线性结构C) 循环链表是非线性结构D) 双向链表是非线性结构参考答案:B解析:例如,只有一个根结点的树,其是非线性结构。
4.一棵二叉树共有25个结点,其中5个是叶子结点,则度为1的结点数为()。
A) 16B) 10C) 6D) 4参考答案:A解析:在一棵二叉树中只有度为0、1、2三种结点。
且二叉树中,叶子结点(度为0的结点)是度为2的结点个数加1。
所以,度为2的结点是4,度为1的结点是25-5-4=16。
5.某二叉树共有7个结点,其中叶子结点只有1个,则该二叉树的深度为(假设根结点在第1层)()。
A) 3B) 4C) 6D) 7参考答案:D解析:在一棵二叉树中只有度为0、1、2三种结点。
且二叉树中,叶子结点(度为0的结点)是度为2的结点个数加1。
所以,度为2的结点是0,度为1的结点是7-1-0=6。
除叶结点外,每一个结点都有一个分支。
每个结点在一层,共7层,如下图所示:6.对下列二叉树进行前序遍历的结果为()。
A) DYBEAFCZXB) YDEBFZXCAC) ABDYECFXZD) ABCDEFXYZ参考答案:C解析:先(前)序遍历的递归算法定义:若二叉树非空,则依次执行如下操作:⑴ 访问根结点;⑵ 遍历左子树;⑶ 遍历右子树。
遍历过程发下:1:先访问根结点:A2:遍历A的左子树(递归调用);2_1:先访问A的左子树的根结点:B2_2:遍历B的左子树(递归调用);2_2_1:先访问B的左子树的根结点:D2_2_2:遍历D的左子树(递归调用),没有左子树;2_2_3:遍历D的右子树(递归调用)2_2_3_1:遍历D的右子树的根结点:Y;至此,B的左子树遍历完,向上回溯。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
递归程序设计1.计算最大约数gcd(m,n)可用递归形式定义如下:若m%n等于0,则gcd(m,n)等于n否则,gcd(m,n)等于gcd(n,m%n)。
#include<iostream>using namespace std;int gcd(int m, int n){if (m%n == 0)return n;else return gcd(n, m%n);}int main(){int m, n;cout << "m=";cin >> m;cout << "n=";cin >> n;cout <<gcd(m, n);system("pause");return 0;}3.27.2017int gcd(int m,int n){if(m%n==0)return n;else return gcd(n,m%n);}int main(){int n,m;while(1){cin>>m>>n;if(m==0)break;cout <<"gcd="<<gcd(m,n)<<endl;}system("pause");return 0;}编写一递归函数,求最大约数,并测试#include<iostream>using namespace std;int gcd(int m, int n){if (m%n == 0) return n;else return gcd(n , m %n );} int main(){int m, n; cout << "n="; cin >> n;cout << "m=";cin >> m;cout << gcd(m, n);system("pause"); return 0;}。
2.编写一递归函数,计算下面的级数:ii m 1......31211)(++++= #include <iostream>using namespace std;double f(double i ){if (i == 1)return 1; else return (1/i *f(i -1)); }int main(){int i;cout << "i="; cin >> i;cout << f(i);system("pause"); return 0; }3.27.2017double k4(double n ){if (n ==1)return 1;else return (1/n +k4(n -1));}int main() {double n,m; while (1){cin>>n;if (n==0)break ;cout <<"k4="<<k4(n)<<endl;}system("pause");return 0;}3.编写一递归函数,计算下面的级数:12.....11594735231)(+++++++=i i i m #include <iostream>using namespace std;double x( double n ){if (n > 0) { if (n == 1)return (1 / 3);else return n / (2 * n + 1) + x(n - 1);}}int main(){cout << x(1) << endl;cout << x(2) << endl;cout << x(3) << endl;system("pause");return 0;}4.编写一函数,逆序输出一个整数n 。
函数头如下:void reverseDisplay(int value)#include <iostream>using namespace std;void reverseDisplay(int value ) {if (value > 0){cout << value % 10;reverseDisplay(value / 10);}}int main(){int i;cout << "i=";cin >> i; reverseDisplay(i);system("pause");return 0;}3.27.2017void k5(int n){if(n>0) {cout <<n%10;k5(n/10);}}int main(){double n,m;while(1){cin>>n;if(n==0)break;k5(n);}system("pause");return 0;}5.编写一函数,逆序输出一个字符串,函数头如下:void reverseDisplay(const char *s)6.编写一递归函数,统计一个指定字符在一个字符串中出现的次数,函数头如下: int count(char *,char )7.编写一递归函数,计算一个整数中所有数字之和。
函数头如下: int sumDigit(long n)#include<iostream>using namespace std;int sumDigit(long n){if (n < 10)return n;else return ((n % 10) + sumDigit(n / 10));}int main(){int m, n;cout << "n=";cin >> n;n=abs(n);cout << sumDigit(n);system("pause");return 0;}8. 编写一递归函数,计算x n。
#include<iostream>using namespace std;int p(int x, int n){if (n== 0)return 1;if (x > 0 && n > 0){if (n == 1)return x;else return (x*p(x, n - 1));}}int main() {int x, n;cout <<"x=";cin >> x;cout <<"n=";cin >> n;if (x <= 0)cout <<"无法计算"<< endl;else cout << p(x, n);cout << endl;system("pause");return 0;}3.27.2017int k7(int x,int n){int t=1;for(int i=1;i<=n;i++)t=t*x;return t;}int main(){int n,x;while(1){cin>>x>>n ;if(n==0)break;cout <<"k7="<<k7(x,n);}system("pause");return 0;}编写一递归函数,计算1+2+3+4+…+n。
n为正整数#include<iostream>using namespace std;int f(int n){if (n == 1)return 1;else return (n + f(n - 1));}int main(){int m, n;cout << "n=";cin >> n;n=abs(n);cout << f(n);system("pause");return 0;}10. 编写一递归函数,计算n!#include<iostream>using namespace std;int j(int n){if (n >= 0){if (n == 1 || n == 0)return 1;if (n > 1)return (n*j(n - 1));}}int main(){int m, n;cout << "n=";cin >> n;n=abs(n);cout << j(n);system("pause");return 0;}11.编写一递归函数 void Inverse(char ch[])将字符串ch逆序输出。
12.编写一递归函数 void Inver_Out(int a[],int n)将数组a中的数据逆序输出。
13. 编写一递归函数void DtoP(int n,int p),实现将十进制数n 转换为p进制数并输出。
14.使用递归调用方法将一个n位整数转换成字符串。
最新文件仅供参考已改成word文本。
方便更改。