PPT7-6函数的递归调用.pdf
函数的递归调用 递归 在函数调用的过程中,直接或间接 地调用该函数本身,称为函数的递归调 用。 直接递归 f函数 调用f函数 f1函数 调用f2函数 f2函数 调用f1函数 间接递归 递归的条件 直接递归 f函数 调用f函数 f1函数 调用f2函数 f2函数 调用f1函数 间接递归 无限制的递归调用会让 系统崩溃,而得不到最终结 果,而无最终结果的算法也 是无效的。 递归的条件 递归条件,即何时递归。 递归结束条件,即何时终止递归。 直接递归 f函数 调用f函数 f1函数 调用f2函数 f2函数 调用f1函数 间接递归 何时使用递归 当一个较大的问题规模可以由解 决一个较小的问题规模得到时,可以 使用递归求解。一个难以解决的大问 题(n),可以通过比该问题的规模 稍小的问题(n-1)求解得到,从而 解决全局。 实例7.4递归求解n! 接收任务 解题思路:求n!可以通过计算1 2 3 n 2 n 1 n得 到,这种方法简单,容易理解,也易 于实现。 接收任务分析任务 解题思路:但是如何使用递归求解该 问题呢?在递归求解的过程中,必须 确定两个条件,一个是递归条件,一 个是递归结束条件。 接收任务分析任务 ! = ! = = , ! 核心代码接收任务分析任务 int factorial(int n) if(n=0|n=1) return 1; else return n*factorial(n-1); int main(int argc, char *argv) int n; int result; printf(请输入数据n,求n!:n); scanf(n=%d, result = factorial(n); printf(n! = %dn,result); return 0; main函数factorial(n)factorial(n)factorial(n) 求5!求5*4!求4*3! factorial(n) 求3*2! 输出结果返回120返回24返回6返回2 5432 factorial(n) 求2*1! 返回1 1 解决问题 递归调用时,一定要谨记递归条件和递归结束条件。能 够将这两个条件填充完整,递归方可实现。同学们,你们学 会了吗?