递归和循环的功能都是相同的,但是在不同的情况下需要进行合理选择:如果程序运用循环,程序的性能可能更高;如果程序使用递归,程序可能更容易理解。需要根据自己需求选择算法。
递归包含基线条件和递归条件,基线条件指的是函数不再调用自己,避免程序进入死循环;而递归条件就是自己调用自己。
递归的过程中,要注意调用栈这个概念(所有函数的调用都会进入调用栈,这是系统自动给你创建的!)。下面举例:
当fact(3)的时候,计算机内部执行以下操作:
即fact(3)调用fact(2),把fact(2)进行压栈操作,而fact(2)又调用fact(1),进行第二次压栈操作,最终形成:
由于fact(1)就是x==1的情况,会return 1,注意,这就是一个基线条件,即递归终止了。
接下来会进行出栈操作(因为上一步操作结束了,已经return 1 了)
所以会一步一步的出栈,直到获得最后的值。
其实递归也不是万能的,当递归栈很高的时候,效率会降低,有两种解决办法:
1.重新编码,改成循环操作
2.使用尾递归,这是一种高级递归
