1、定义:使用被定义对象的自身来为其下定义(即自己给自己下定义)。 2、过程:递归的过程是一个过程直接或间接地调用自己。 3、使用情况: 1.定义是递归的; 2.数据结构是递归的 ; 3.问题的解法是递归的 4、函数中的递归调用: 1.基于公式的递归; 2.基于语义的递归(如汉诺塔问题、快速排序和八皇后问题等)。 5、适用递归方法的问题: 1.有一个初始状态(使递归过程具有出口,而不是无限递归) 2.后续的情况可由前面的状态推出(允许调用自己) 6、递归过程的理解: 递归过程的实现需要自己调用自己,在每一次的递归调用时,需要为过程中使用的参数、局部变量等另外分配存储空间。 递归层层向下进行,而退出时则是与之相反的。 如对于n!的递归过程。递归的执行是先进行回溯至初始状态,在递推到所需的状态去求解问题 可以用栈的思想理解递归的过程。每一层的递归调用需分配的空间形成递归的工作记录,按后进先出的栈组织。 我们以阶乘的递归过程为例。 首先我们要求3!的值将n=3代入阶乘函数fac中,此时我们执行到第5行时暂停,因为此时我们需要fac(2)才能继续执行,所以我们将该位置记录下来,放入栈中,即n=3,第5行,f=3 * fac(2);以此类推,不断记录停止的位置并记录到栈中,直到执行到初始状态,在fac中即为fac(0),此时我们return了f的值,即fac(0)=1,现在我们可以将栈中所记录的各个位置放出了,由此得到最后3!=6。 7、递归程序的要素: 1.递归语句(如阶乘中的f = n * fac(n-1)) 2.递归次数 3.递归出口(即该问题的初始状态) 8、递归问题的思路: 可以先根据题目条件找到递归出口,然后可以根据第n与第n-1或n+1之间的关系,写出递归关系,最后得到递归函数。 参考文章:懒猫老师-C语言-递归函数(函数递归调用)_哔哩哔哩_bilibili