在数学中,关于递归函数的定义是这样的:对于某一函数f(x),其定义域是集合A,那么若对于A集合中的某一个值x1,其函数值f(x1)由f(f(x1))决定,那么就称f(x)为递归函数。
在编程语言中,程序调用自身的编程技巧称为递归。递归作为一种算法在程序设计语言中广泛应用。一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,大大减少了程序的代码量。
递归的主要思考方式在于:把大事化小
递归的两个必要条件:
- 存在限制条件,当满足这个限制条件的时候,递归便不再继续
- 每次递归调用之后越来越接近这个限制条件
不多说,直接上代码:
例1:递归和非递归分别实现求第n个斐波那契数(斐波那契数列指的是这样一个数列 1, 1, 2, 3, 5, 8, 13, 21…这个数列从第3项开始,每一项都等于前两项之和。)
首先用递归的方法:
int fib(int i)
{
if(i<=2)
return 1;
else
return fib(i-1)+fib(i-2); //递归调用fib()
}
int main()
{
int i = 0;
int ret = 0;
printf("请输入:");
scanf("%d",&i);
ret = fib(i);
printf("第%d个斐波那契数是:%d\n",i,ret);
system("pause");
return 0;
}