递归函数基础知识
1.递归函数
1.1.什么是递归?
所谓递归,就是将自己包含在内,或者用自己来定义自己。
1.2.递归作用
有效利用递归不仅可以使程序更简洁,还可以很好解决一些问题(可以看主页里的一道递归练习题)。
1.3.递归思想
把一个大型复杂问题层层转化为⼀个与原问题相似,但规模较小的子问题来求解;直到子问题不能再被拆分,递归就结束了。所以递归的思考方式式就是把大事化小的过程。
1.4.简单的递归程序
#include <stdio.h>
int main()
{
printf("hehe\n");
main();//main函数中又调⽤了main函数
return 0;
}
上面那个程序由于没有调用的结束条件,就会陷入死循环,最终造成栈溢出。所以递归有限制条件。
1.5.递归函数的必要条件
1.递归存在限制条件,当满足这个限制条件的时候,递归便不再继续。
2.每次递归调用之后越来越接近这个限制条件。
2.递归函数简单举例
2.1.求n的阶乘
2.2.简单分析
由阶乘公式:n!=1* 2 * 3*……*n。可得出:
2.3.代码实现
#include<stdio.h>
int Fact(int n);
int main()
{
int num;
printf("请输入一个整数:");
scanf("%d",&num);
printf("%d的阶乘为%d。\n",num,Fact(num));
return 0;
}
int Fact(int n)
{
if(n>0)
return n*Fact(n-1);//当n>0时继续调用函数实现递归
else
return 1;//当n=1时返回1
}
2.4.运行结果
2.5.画面推演
图1:
分析:
1.当输入5时向Fact()函数传入4;
2.之后又一次向Fact()函数传入3;
3.之后又一次向Fact()函数传入2;
4.之后又一次向Fact()函数传入1;
5.当传入值为1时返回1,然后回归原来函数如图所示,最后达到1* 2* 3* 4* 5的计算效果传到main函数完成阶乘的计算。