大事化小:把一个大型复杂问题层层转化为一个与原问题相似的规模较小的问题来求解,来减少程序的代码量.
tips:1.没有跳出条件,(死递归)栈溢出.逼近跳出条件.
2.递归层次不能太深
引例:输入一个数字,按照顺序打印它的每一位.
例如输入:1234 输出:1 2 3 4
不用函数的考虑:,放到一个数组里面,然后再逆序输出.
** print(1234)
print(123)再加上4
print(12)+3 4
print(1)+2 3 4
#include <stdio.h>
void print(int n)
{
if(n>9){
print(n / 10);
}
printf("%d ",n % 10);
}
int main()
{
int num =0;
scanf("%d",&num);
print(num);
return 0;
}
👆实际运行逻辑
例一:求n的阶乘
公式
#include <stdio.h>
int fac(int n)
{
if(n<=1)
return 1;
else
return n*fac(n-1);
}
int main()
{
int n=0;
scanf("%d",&n);
printf("%d",fac(n));
return 0;
}
例二:用辗转相除法求两个数的最大公因数
#include <stdio.h>
int gcd(int a,int b)
{
while(a%b!=0){
int r=a%b;
a=b;
b=r;
}
return b;
}
int main()
{
int a,b;
while(scanf("%d%d",&a,&b)!=EOF)
printf("%d\n",gcd(a,b));
return 0;
}
这里一定要注意,为什么输入5、15和15、5的结果是一样的(仔细想想o)3%15=3