A: hanoi n-1 mid end start
B: hanoi (n-1) mid start end
C: hanoi (n-1) start end mid
D: hanoi (n-1) mid end start
举一反三
- 对于汉诺塔问题,假设盘子从上到下编号1,2,3,...,现在要把“start柱子上的n个盘子移到end柱子,mid柱子为辅助。如果用(a,b,c)表示将编号a的盘子从b柱子移到c柱子,那么下面哪个列表表示两个盘子的解决方法? A: [(1,start,mid),(1,mid,end),(2,start,end)] B: [(2,start,end),(1,mid,end),(1,start,mid)] C: [(1,start,end),(2,start,end),(1,mid,end)] D: [(1,start,mid),(2,start,end),(1,mid,end)]
- 汉诺塔(hanoi塔)问题可以描述为以下递归形式 hanoi(n个盘子, A→B,缓冲柱为C) { if (n==1) 直接从A移到B else { hanoi(n-1个盘子, A→C, 缓冲柱为B) 移动n号盘子:A→B hanoi(n-1个盘子, C→B, 缓冲柱为A) } } 9bd153b5af31717f1112b419266aaa8c.jpg
- 代码填空【汉诺塔问题(a柱为原始柱,b柱为辅助柱,c柱为目标柱)】:void hanoi(int n, char a, char b, char c) { if (n > 0) { _________(1)__________; move(n,a,c); //将n号圆盘从a柱移至c柱 _________(2)_____________; }} A: (1) hanoi(n-1, b, a, c)(2) hanoi(n-1, a, c, b) B: (1) hanoi(n-1, a, b, c)(2) hanoi(n-1, b, c, a) C: (1) hanoi(n-1, b, c, a)(2) hanoi(n-1, a, b, c) D: (1) hanoi(n-1, a, c, b)(2) hanoi(n-1, b, a, c)
- 补全代码解决汉诺塔问题。 def hanoi(n,A,B,C): if (1): print('move',n,'from',A,'to',C) else: hanoi((2),A,C,B) hanoi(1,A,B,C) hanoi((3),(4),(5),(6)) n=int(input('输入盘子数:')) if n: hanoi(n,'A','B','C')
- 汉诺塔(hanoitower) 间题形式化描述为hanoi tower (n, from, to, temp),其中from为起始柱子,to为目标柱子,tem为临时柱子,其含义是将柱子A上的n个盘子借助于柱子C搬动到柱子D上。若要求将柱子A上的n-1个盘子借助柱子C搬到柱子B上,则该问题正确的形式化描述为( ) A: Hanoitower (n-1, from, temp, to) B: Hanoitower(n-1,f to,f rom, temp, ) C: Hanoitower(n-1, temp, to , from) D: Hanoi tower (n-1, to, temp, from)
内容
- 0
Hannoi塔问题如下图所示。现要求将塔座A上的所有圆盘移动塔座B上,并仍按同样顺序叠置。移动圆盘时遵守Hannoi塔问题的移动法则。由此设计出解Hanoi塔问题的递归算法正确的为()。 A: A voidhanoi(intn,intA,intC,intB){ if(n>0){ hanoi(n-1,A,C,B);move(n,A,B);hanoi(n-1,C,B,A);}} B: B voidhanoi(intn,intA,intB,intC){ if(n>0){ hanoi(n-1,A,C,B);move(n,A,B);hanoi(n-1,C,B,A);}} C: C voidhanoi(intn,intC,intB,intA){ if(n>0){ hanoi(n-1,A,C,B);move(n,A,B);hanoi(n-1,C,B,A);}} D: D voidhanoi(intn,intC,intA,intB){ if(n>0){ hanoi(n-1,A,C,B);move(n,A,B);hanoi(n-1,C,B,A);}}
- 1
代码填空【使用递归实现二分查找】 int binarySearch(int a[], int key, int low, int high) { if (low > high) return -1; int mid; mid = (low + high) / 2; if (key == a[mid]) return mid; else if (key < a[mid]) return ________(1)__________; else return ________(2)______________; }
- 2
下面哪个函数返回中出现substr的第一个字母的标号,如果S中没有substr则返回-1: A: S.rindex(substr,[start,[end]]) B: S.rfind(substr,[start,[end]]) C: S.index(substr,[start,[end]]) D: S.find(substr,[start,[end]])
- 3
中值是在一组已排序数值的中间值。假如是奇数数列,则是中间的值,如果是偶数数列,则是中间两个数的平均值。 //求数组a中n个元素的中值[br][/br] double middle(const double a[],const int n) { int mid=(n-1)/2; if(n%2!=0) return a[mid]; else[br][/br] return【】; } A: (a[mid]+a[mid+1])/2 B: (a[mid]+a[mid-1])/2 C: a[mid]/2 D: a[mid+1]/2
- 4
int F(int n){if(n==0)return 1;return n*F(n-1);}是一个递归函数。