1. 求一个不带头结点的单链表L的所有data域(假设为int型)之和。
递归算法:
int Sum(LinkList*L)
{ if (L==NULL)
return 0;
else
return(L->data+Sum(L->next));
}
2. 分析二叉树的二叉链存储结构的递归性,设计求非空二叉链bt中所有结点值之和的递归算法,假设二叉链的data域为int型。
int Sumbt(BTNode *bt) //求二叉树bt中所有结点值之和
{ if (bt==NULL)
return o; //结点为空时返回日
else //否则返回左、右子树结点值之和加上根结点值
return Sumbt(bt->1child)+Sumbt(bt->rchild)+bt->data);
}
3.Hanoi问题
4.n!阶乘
总结:
每递归调用一次,就需进栈一次,最多的进栈元素个数称为递归深度,当n越大,递归深度越深,开辟的栈空间也越大。
每当遇到递归出口或完成本次执行时,需退栈一次,并恢复参量值,当全部执行完毕时,栈应为空。
5.Fibonacci数列
数列定义为:
Fib(n)=1 n= 1
Fib(n)=1 n= 2
Fib(n)=Fib(n-1)+Fib(n-2) n>2
对应的递归算法:
int Fib(int n)
{ if (n==1 ll n==2)
return 1;
else
return Fib(n-1)+Fib(n-2);
)