递归函数(详例)
- 从函数栈的角度的运用
简单的打印运用
#include<stdio.h>
void function(int n);
int main()
{
int n;
scanf("%d",&n);//任意输入打印的个数
function(n);
return 0;
}
void function(int n)
{
if(n)
{
function(n-1);依此调用直到不满足n>=1的条件
printf("%d ",n);从最后一个打印输出,即1,2,3,4,5,6......n;
}
return;
}
- 非空链表的递归找最大值
lim Findmax(lim headptr)
{
lim maxptr;
if(headptr->nextptr==NULL)
return headptr;
else
{
maxptr=Findmax(headptr->nextptr);
return maxptr->num>headptr->num?maxptr:headptr;
}
}
为了更好的理解递归的执行过程:
在调用自生到最后时,if(headptr->nextptr==NULL)
return headptr;返回headptr,此时的maxptr第一次被赋予节点headptr,然后在 maxptr=Findmax(headptr->nextptr);执行的过程中,headptr变为headptr的前一个指针,并在代码中第二个renturn中,再preheadptr->num与maxptr->num比较大小,并将较大的付给maxptr,依此类推,直到返回到第一个节点,结束。
3.链表递归打印
第一个为逆序打印
void Print(lim headptr)
{
if(headptr!=NULL)
{
Print(headptr->nextptr);
printf("%d ",headptr->num);
}
}
第二个为顺序打印
void RPrint(lim headptr)
{
if(headptr!=NULL)
{
printf("%d ",headptr->num);
RPrint(headptr->nextptr);
}
}