关于Linux c 语言中递归函数的使用的较深层问题

原则上讲,为了代码的结构及易于维护性,通常被告知尽量少在代码中使用goto、递归等影响代码结构的代码。


可是,有时候用递归函数的思想确实可以使问题的思路非常清晰。

 由于工作中要解决vlan用户态解析portlist的bug,原来解析portlist的函数看的着实令人头晕,

且有很多较常规的输入形式还会导致挂死的情况,于是开始了重写解析VLAN的以太网端口portlist函数之路。


如"1/1,2-3,5,7-9",感觉开始用指针指向斜杠后边的1,然后分情况来解析字符,并把已经解析的端口赋值给外部数组,

解析一次顺势向后指向对应的位置。如,把1解析之后存入数组后,指针指向2,继续递归调用该函数,之后指针指向5,在递归调用该递归函数。


上代码,需要修复指针越界访问的错误,








 注意: 


1、递归函数中的局部变量在每次调用函数时都会在栈中分配一份,借个图:


 



2、执行过程是到达结束点后再逐级逆着返回。

 所以,编写递归函数时一定要给返回的条件,否则一直调用不到尽头,不知会不会耗尽内存??


3、较重要的一点,递归函数返回值是返回给谁调用我,然后再顺次往下执行,所以尽量不要在递归函数中使用多个if,

而每个if内都调用递归,一旦两个if都会被执行则会引起重入的混乱;所以,当是并列的多种情况时,

尽量使用if……elseif……elseif……else,,使递归函数只在一次调用中执行一次。


 ps。上边的代码中,刚写时没有switch,没有if……elseif……elseif……else, 

只是多个if 分支,分支内是执行与调用递归,然后用gdb调试才看出来混乱。


4、使用递归调试时,最好用gdb,否则痛苦死。。。

5、有时递归很耗系统资源,珍爱生命,慎用递归,不理解时调试更是累死人。。。


                   



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值