递归函数(详例)

递归函数(详例)

  1. 从函数栈的角度的运用

简单的打印运用

#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;
}
  1. 非空链表的递归找最大值
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);
 }
}

猜你喜欢

转载自blog.csdn.net/qq_44116998/article/details/88367844
今日推荐