A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

黄科。com

初级黑马

  • 黑马币:22

  • 帖子:7

  • 精华:0

© 黄科。com 初级黑马   /  2018-6-12 13:43  /  781 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

浅谈一下一种优雅的问题解决方案------递归
首先要说明一下的是递归并没有性能上的优势,他更加倾向于让解决方案更清晰。套用一个大牛的话“如果使用循环,程序的性能可能更高;如果使用递归,程序可能更容易理解。如何选择要看什么对你来说更重要。”
因为递归函数要调用自己,因此要编写这样的函数时很容易出错,导致无限循环,所以在编写时程序时要注意,其中要包含两个条件,一个是基线条件,一个就是递归条件,基线条件就是打破循环,使得程序不再调用自己。
假如,我们有一个盒子,盒子里面还有A,B,C盒子,A,B,C盒子里面分别还有1,2,3盒子,某个盒子里有一把钥匙,我们要找到这把钥匙,有两种算法。
第一种,创建一个要查找的盒子堆,从盒子堆中取出一个盒子,在里面找,如果找到的是盒子就加到盒子中,以便以后再查找。如果找到钥匙就大工告成,没找到就再去盒子堆中。
第二种,1.检查盒子中的每样东西,2.如果是盒子就盒子就回到1,3.如果是钥匙就大工告成。
第一种方法我们可以使用while循环,只要盒子堆不空,就从中取一个盒子,第二种方法使用递归,函数自己调用自己。这两种方法作用相同单但第二种更加清晰,所以说递归只是让解决方案更加的清晰,并没有性能上的优势,在有些情况下,使用循环性能更好。
在上述假设中,第一种方法创建了一个盒子堆,但第二种没有,因为,盒子堆存放在了栈中,这个栈包含了未完成的函数调用,每个函数都包含未检查完的盒子堆,所以使用栈还是很方便的。但是这会占用很大的内存,所以说看具体情况使用循环或使用递归吧。

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马