这是一个 关于递归函数和while的问题 5C

递归函数,就是递推,加一个条件,然后就退出的过程。
while(变量)形式,里面是操作,不符合条件就退出的过程。
二者本质完成的功能是一样的,而且递归存在大量占用内存的问题。我觉得递归是没有必要存在的。大佬们,我的理解对吗

4个回答

不是很正确的哦,递归的本质是调用当前方法自身,直到达到最后一层方法结束,然后一层层向上返回结果。
跟 while 循环不是一个意思,而且有些递归的实现不是用 while 循环而是用 if 判断是继续调用还是回调自己。

dashicaineng
蔡能教授,网站特聘专家 综合几个回答来看,觉得这个回答得最正确。
4 个月之前 回复
dabocaiqq
请你们大家多多姿瓷我菠菜菌 回复qq_43412960: 麻烦采纳一下可以么。
4 个月之前 回复
qq_43412960
qq_43412960 谢谢
4 个月之前 回复
caozhy
贵阳老马马善福专业维修游泳池堵漏防水工程 赞同这个回答,建议采纳。我补充下,循环和尾递归是等价的,而尾递归只是递归的一种,使用递归而不是循环的好处在于,不需要自己维护每次递归调用而定义的那套局部变量,因为堆栈是自动被维护的。在不支持递归的语言,比如我说过我以前用的BASICA 上,就需要自己维护这些变量,这是非常繁琐的。
4 个月之前 回复

不能这样理解,虽然说递归可以用循环方式实现,而且效率也没有循环高。但是递归相对来说比较容易实现,比如在二叉树的遍历,用递归很简单的代码就能实现,而用循环的话,相对来说复杂一点。

qq_43412960
qq_43412960 谢谢
4 个月之前 回复

递归造成占用内存的问题是因为函数调用栈造成的,利用尾递归优化就可以处理,每次只有一个函数在调用;
递归函数处理比while循环处理灵活性更高;

caozhy
贵阳老马马善福专业维修游泳池堵漏防水工程 回复qq_43412960: 这个回答并不正确,尾递归只是递归的特例,不是所有的递归都能转换成尾递归。
4 个月之前 回复
qq_43412960
qq_43412960 谢谢
4 个月之前 回复

不应该讨论虾米应该不应该这样幼稚的话题;
就好比讨论各种循环语句一样,记得早年间还讨论有了GOTO还要其他循环写法?其实现在大部分人都喜欢写循环而少用GOTO一样;
我虾米循环都用包括GOTO,只能说适用哪里就可使用;
地跪调用栈具有很明显的特点就是进栈和出栈,具有特殊的功能,在需要回溯的地方很适合使用,而有些程序使用地跪我觉得是没必要的。
通俗的比喻:人会走路,为何还要自行车,有自行车为何还要汽车,有汽车为何还要列车、飞机、火箭、飞船。。。。。。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问