1、何为递归
1.1:在C语言中,递归就是函数自己调用自己。递是指递推,归是指回归。
1.2:递推的两个必要条件。
a: 递归存在限制条件,当满足限制条件时,递归便不再继续
b:每一次函数递归后都要越来越接近限制条件
1.3:递归的层次不能太深。
每一次递归都是一次函数调用,需要向栈区申请空间(这块空间被称为运行时堆栈,也叫函数栈帧),存放函数调用期间各种局部变量的值,当递归的次数足够多时,就会将栈区的空间占满,出现栈溢出(statck overflow)
1.3.1:递归的层次太深的错误示例
/*用递归的方式求n! (n>=0)*/
long long Fact(int n)
{
if (n <= 1)/*限制条件*/
return 1;
else
return n * Fact(n - 1);/*每一次递归都越来越接近限制条件*/
}
int main()
{
long long n = 0;
scanf("%lld", &n);
printf("%lld\n", Fact(n));
return 0;
}
当n的值比较大时,函数递归的次数也会很多,可能使得栈溢出。导致程序运行的结果不符合预期,或者程序直接崩溃了。
1.4递归的思想
把⼀个大型复杂问题层层转化为⼀个与原问题相似,但规模较小的子问题来求解;直到⼦问题不能再被拆分,递归就结束了
2、递归的示例(两种方法)
输⼊⼀个正整数m,按照顺序打印正整数的每⼀位