1.递归思想:
把一个复杂的问题拆分成一个一个小的问题,直到小的问题不能再被拆分。
递是传递的意思,归是回归的意思,下文举例说明。
1条件:
(1)递归存在条件,当不满足这个条件时就停止递归 。
(2)每一次递归都会越来越接近限制条件。
2.举例
1.1计算一个数的阶乘
(1)一个数的阶乘是从1开始一直乘到这个数为止,例如5!=1*2*3*4*5,n!的阶乘就是n*(n-1)*(n-2)*........*1,这是一道数学问题,要把他转化为编程逻辑,一般 先想到的是循环,从1一开始一直乘到n结束,使用递归也同样简单,如图
利用这种方法完成递归,首先创建一个子函数Fact()
子函数分析
最后完成主函数:
#include<stdio.h>
int Fact(int n)
{
if (n == 1)
{
return 1;
}
return n * Fact(n-1);
}
int main()
{
int a;
scanf("%d", &a);
printf("%d", Fact(a));
return 0;
}
2.输出一个数的各位数字
例如1234,执行后输出1 2 3 4
要想得到1 2 3 4可以从取余的方法开始下手,1234%10=4,
1234/10=123,123%10=3,
123/10=12,12%10=2,
12/10=1,10%10=2,
1<10,取余自然是1本身
我们可以想到每次把a取余的数放在一个数组中,最后在逆序打印这个数组,这个办法简单,但是执行起来编写的代码较多,较为麻烦,此时利用递归可以刚好解决这个问题
先完成子函数的构建
void Print(long n)
{
if(n>9)
{
Print(n/10);
}
printf("%d ",n%10);
}
要想完成1234的分离,首先把4分离出来,其次在分离3,一直分离到1,传递参数进入子函数,1234>9,在进入123,,123也大于9,进入12,还是大于9,在进入1,1<9,递归结束,首先完成1的打印,返回上一次,实现分离2的打印,在返回上一次,完成分离3的打印,最后完成分离4的打印。
利用图来解释更为直观一些,函数递归一直执行到限制条件为止,正如开头所说,执行到1为止,依次回归,打印各位数字
最后完成程序
#include<stdio.h>
void Print(long n)
{
if(n>9)
{
Print(n/10);
}
printf("%d ",n%10);
}
int main()
{
long a;
scanf("%d ",&a);
Print(a);
return 0;
}