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);
}
}
递归在这块起到循环的作用。