设计求n!(n为正整数)的递归算法
int fun(int n)
{ if (n==1)
return(1);
else
return(fun(n-1)*n);
}
求解一个不带头节点的单链表L的所有data域之和
int Sum(LinkList *L)
{ if (L==NULL)
return 0;
else
return(L->data+Sum(L->next));
}
求非空二叉链bt中所有节点值之和的递归算法
typedef struct BNode
{ int data;
struct BNode *lchild,*rchild;
} BTNode; //二叉链结点类型
int Sumbt(BTNode *bt) //求二叉树bt中所有结点值之和
{ if (bt->lchild==NULL && bt->rchild==NULL)
return bt->data; //只有一个结点时返回该结点值
else //否则返回左、右子树结点值之和加上根结点值
return Sumbt(bt->lchild)+ Sumbt(bt->rchild)+bt->data);
}
递归法求解Fibonacci数列
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 || n==2)
return 1;
else
return Fib(n-1)+Fib(n-2);
}
Fib(5)的递归树如下所示:
执行Fib(5)时递归工作栈的变化和求解过程: