关于Linuxc语言中递归函数的使用的较深层问题介绍.doc

关于Linuxc语言中递归函数的使用的较深层问题介绍.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
?? ? ?原则上讲,为了代码的结构及易于维护性,通常被告知尽量少在代码中使用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、有时递归很耗系统资源,珍爱生命,慎用递归,不理解时调试更是累死人。。。

文档评论(0)

钱缘 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档