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