基本概念题: 6-1什么叫递归? 6-2适宜于用递归算法求解的问题的充分必要条件是什么?什么叫递归出口? 6-3阶乘问题的循环结构算法和递归结构算法哪个的时间效率好,为什么? 6-4非递归函数调用时系统要保存哪些信息?递归函数调用时系统要保存哪些信息?系 统怎样保存递归函数调用时的信息? 6-5什么叫运行时栈?什么叫运行时栈中的活动记录? 6-6叙述递归算法的执行过程。 复杂概念题: 6-7推导求解n阶汉诺塔问题要执行的移动操作(即算法中pint(函数的调用)次数 6-8我们讨论过的折半查找函数设计如下 int BSearch(elemtype a[, elemtype x, int low, int high) It mid: if(low>high) return -1 if(x = a[mid]) return mid if(x< a[mid]) return (BSearch(a, x, low, mid-1)) else return(BSearch(a, x, mid+1, high)) 讨论如果把上述折半查找函数中最后两语句改为如下形式能否实现算法的设计要求,为什 if(x< amid] BSearch(a, x, low, mid-1) BSearch(a, x, mid+1, high 算法设计题 6-9要求: (1)写出求1,2,3,n的n个数累加的递推定义式 (2)编写求1,2,3,,n的n个数累加的递归算法,假设n个数存放在数组a中。 6-10要求 (1)写出求1,2,3, n的n个数连乘的递推定义式 (2)编写求1,2,3 n的n个数连乘的递归算法,假设n个数存放在数组a中 6-11设a是有n个整数类型数据元素的数组,试编写求a中最大值的递归算法 6-12设计输出如下形式数值的算法 要求 (1)把算法设计成递归结构的算法; (2)画出上述递归算法的调用执行过程基本概念题: 6-1 什么叫递归? 6-2 适宜于用递归算法求解的问题的充分必要条件是什么?什么叫递归出口? 6-3 阶乘问题的循环结构算法和递归结构算法哪个的时间效率好,为什么? 6-4 非递归函数调用时系统要保存哪些信息?递归函数调用时系统要保存哪些信息?系 统怎样保存递归函数调用时的信息? 6-5 什么叫运行时栈?什么叫运行时栈中的活动记录? 6-6 叙述递归算法的执行过程。 复杂概念题: 6-7 推导求解 n 阶汉诺塔问题要执行的移动操作(即算法中 printf()函数的调用)次数。 6-8 我们讨论过的折半查找函数设计如下: int BSearch(elemtype a[], elemtype x, int low, int high) { int mid; if(low>high) return -1; mid =(low+high)/2; if(x == a[mid]) return mid; if(x < a[mid]) return (BSearch(a,x,low,mid-1)); else return (BSearch(a,x,mid+1,high)); } 讨论如果把上述折半查找函数中最后两语句改为如下形式能否实现算法的设计要求,为什 么? if(x < a[mid]) BSearch(a,x,low,mid-1); else BSearch(a,x,mid+1,high); 算法设计题: 6-9 要求: (1)写出求 1,2,3,......,n 的 n 个数累加的递推定义式; (2)编写求 1,2,3,......,n 的 n 个数累加的递归算法,假设 n 个数存放在数组 a 中。 6-10 要求: (1)写出求 1,2,3,......,n 的 n 个数连乘的递推定义式; (2)编写求 1,2,3,......,n 的 n 个数连乘的递归算法,假设 n 个数存放在数组 a 中。 6-11 设 a 是有 n 个整数类型数据元素的数组,试编写求 a 中最大值的递归算法。 6-12 设计输出如下形式数值的算法。 1 2 2 3 3 3 ...... n n n ... n 要求: (1)把算法设计成递归结构的算法; (2)画出上述递归算法的调用执行过程;