递归




typedef struct node
{
 int data;
 struct node *next;
}ElemSN;


//求单链表的最大值
int   maxValue(ElemSN *h)
{
 int max = 0;
 if (h)
 {
  max= maxValue(h->next);
  if (h->next == NULL) max = h->data;
  else
  {
   if (max < h->data)max = h->data;
  }
 }
 return max;

}


//输出奇数结点的值并返回个数
int oddNumber(ElemSN *h)
{
 if (h)
 {
  
  if (h->data % 2)
   printf("\n%5d", h->data);

  return oddNumber(h->next) + h->data % 2;
 }
 
 else return 0;

}

注意:这块的else语句一定不能省略,否则,返回的值为随机值。
判断条件为if(h!=NULL)则出循环h为NULL,如果没有else语句此时就会出现随机数。


//用递归建一个单链表

ElemSN * creatlink1(int x)
{
 ElemSN * h;
 if (x==0) return 0;
 else
 {
  h = (ElemSN *)malloc(sizeof(ElemSN));
  h->data = 8;
  h->next=creatlink1(x - 1);
  return h;
 }
 
 
}

总结:用递归创建单链表的本质就是用一个指针h不断地创建结点,当创建到足够的结点时,(if -else条件进行判断)给最后一个结点的next赋空,然后把该结点的地址返回,用h->next接受实现挂链。最后返回头指针。

//输出一个数的二进制数
void print(int x)
{
 if (x % 2)
 {

  print(x / 2);
  printf("%5d", x % 2);
 }
}


//输出各个位上的数字
void number(int x)
{
 if (x % 10)
 { number(x / 10);
  printf("\n\n%d",x%10);
 
 }
}
****如果用非递归方法的话,
void number(int x)
{
 while (x % 10)
 { x=x/10;
  printf("\n\n%d",x%10);
 
 }
}
递归在这块起到循环的作用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值