求Fibonacci数列的递归算法如下IntFib(intn)if (n==1//n==2)return(1);elsereturn(Fib(n-1)+Fib(n-2));16
6 求Fibonacci数列的递归算法如下: Int Fib(int n) { if (n==1||n==2) return(1); else return(Fib(n-1)+Fib(n-2)); }
2.数据结构是递归的有些数据结构是递归的。单链表就是一种递归数据结构,其结点类型定义如下:typedef struct LNodeElemType data;struct LNode *next;LinkList;结构体LNode的定义中用到了它自身,即指针域next是一种指向自身类型的指针,所以它是一种递归数据结构
7 2. 数据结构是递归的 有些数据结构是递归的。单链表就是一种递归 数据结构,其结点类型定义如下: typedef struct LNode { ElemType data; struct LNode *next; } LinkList; 结构体LNode的定义中用到了它自身,即指针 域next是一种指向自身类型的指针,所以它是一种 递归数据结构
对于递归数据结构,采用递归的方法编写算法既方便又有效例如,求一个不带头结点的单链表head的所有data域(假设为int型)之和的递归算法如下:int Sum (LinkList *head)if (head==NULL)return O;elsereturn(head->data+Sum(head->next):8
8 对于递归数据结构,采用递归的方法编写算法 既方便又有效。 例如,求一个不带头结点的单链表head的所有 data域(假设为int型)之和的递归算法如下: int Sum (LinkList *head) { if (head==NULL) return 0; else return(head->data+Sum(head->next)); }
3.问题的求解方法是递归的有些问题的解法是递归的,典型的有Hanoi问题求解,该问题描述是:设有3个分别命名为X,Y和Z的塔座,在塔座X上有n个直径各不相同,从小到大依次编号为1,2,,n的盘片,现要求将X塔座上的n个盘片移到塔座Z上并仍按同样顺序叠放,盘片移动时必须遵守以下规则:每次只能移动一个盘片;盘片可以插在X,Y和Z中任一塔座;任何时候都不能将一个较大的盘片放在较小的盘片上。设计递归求解算法,并将其转换为非递归算法设Hanoi(n,x,y,z)表示将n个盘片从x通过y移动到Z上,递归分解的过程是:
9 3. 问题的求解方法是递归的 有些问题的解法是递归的,典型的有Hanoi问 题求解,该问题描述是:设有3个分别命名为X,Y 和Z的塔座,在塔座X上有n个直径各不相同,从小 到大依次编号为1,2,.,n的盘片,现要求将X塔 座上的n个盘片移到塔座Z上并仍按同样顺序叠放, 盘片移动时必须遵守以下规则:每次只能移动一个 盘片;盘片可以插在X,Y和Z中任一塔座;任何时 候都不能将一个较大的盘片放在较小的盘片上。设 计递归求解算法,并将其转换为非递归算法。 设Hanoi(n,x,y,z)表示将n个盘片从x通过y移动到 z上,递归分解的过程是:
Hanoi(n-l, X, z, y) ;move(n, X, z):Hanoi(n,x,y,z) )/*将第n个圆盘从x移到z;*/Hanoi(n-1l, y, X, z)10
10 Hanoi(n,x,y,z) Hanoi(n-1, x, z, y); move(n, x, z): /*将第n个圆盘从x移到z;*/ Hanoi(n-1, y, x, z)