递归与递归函数
递归:是C语言编程中,分析复杂问题的重要思想。
递归函数:是指一个函数的函数体中直接或间接调用了该函数自身。
递归函数执行过程
递推阶段:从原问题出发,按递归公式递推从未知到已知,最终达到递归终止条件
回归阶段:按递归终止条件求出结果,逆向逐步代入递归公式,回归到原问题求解
构造递归函数的关键
递归公式:递归公式属于一种递推公式。
结束条件:递推公式不能无限制调用自身,需要这样一个出口。
经典案例
问题1:求n!
问题分析
n! = n * (n-1)!
(n-1)! = (n-1) * (n-2)!
(n-2)! = (n-2) * (n-3)!
......
......
2! = 2 * 1!
1.递推公式 显然 n! = n * (n-1)! 作为递推公式,可以将 (n-1)! 进行相同的规律分解。
2.结束条件 1! = 1 ,这是已知的。
函数编程
#include <stdio.h>
int fac(int n)
{
if (n == 0 || n == 1)
return 1;
return n * fac(n-1);
}
问题2:计算斐波那契数列
1, 1, 2, 3, 5, 8, 13, 21, 34, 55......
1.规律:这个数列从第3项开始,每一项都等于前两项之和。
2.递推公式: f(n) = f(n-1) + f(n-2)
3.结束条件: f(1)=1、f(2)=1
函数编程
int fib(int n)
{
if (n == 1 || n == 2)
return 1;
return fib(n-1)+fib(n-2);
}