递归和循环的功能都是相同的,但是在不同的情况下需要进行合理选择:如果程序运用循环,程序的性能可能更高;如果程序使用递归,程序可能更容易理解。需要根据自己需求选择算法。

    递归包含基线条件递归条件,基线条件指的是函数不再调用自己,避免程序进入死循环;而递归条件就是自己调用自己。

    递归的过程中,要注意调用栈这个概念(所有函数的调用都会进入调用栈,这是系统自动给你创建的!)。下面举例:
    image.png
    当fact(3)的时候,计算机内部执行以下操作:
    image.png
    即fact(3)调用fact(2),把fact(2)进行压栈操作,而fact(2)又调用fact(1),进行第二次压栈操作,最终形成:
    image.png
    由于fact(1)就是x==1的情况,会return 1,注意,这就是一个基线条件,即递归终止了。
    接下来会进行出栈操作(因为上一步操作结束了,已经return 1 了)
    image.png
    所以会一步一步的出栈,直到获得最后的值。

    其实递归也不是万能的,当递归栈很高的时候,效率会降低,有两种解决办法:
    1.重新编码,改成循环操作
    2.使用尾递归,这是一种高级递归