1.递归
#include<stdio.h>
int main()
{
printf("hehe\n");
main();
return 0;
}
上面的递归只是为了演示递归的基本形式,不是为了解决问题,实际会陷入死递归,导致栈溢出。
2.递归的限制条件
2个必要条件:
存在限制条件,当满足条件时,递归不再继续。
每次递归调用后,会越来越接近限制条件。
3.递归举例
3.1求n的阶乘
#include<stdio.h>
int Fact(int n)
{
if(n<=0)
return 1;
else
return n*Fact(n-1);
}
int main()
{
int n=0;
scanf("%d",&n);
int ret=Fact(n);
printf("%d\n",ret);
return 0;
}
3.2顺序打印一个整数的每一位
输入一个整数m,打印这个按照顺序打印整数的每一位。
比如说,输入145,输出1 4 5
如果n是一位数,每一位就是本身。如果超过1位数,就拆分每一位。
#include<stdio.h>
void Print(int n)
{
if(n>9)
{
Print(n/10);
}
printf("%d ",n%10);
}
int main()
{
int m=0;
scanf("%d",&m);
Print(m);
return 0;
}
如果递归层次太深,容易造成栈溢出的现象。
4.迭代
如果不想用递归,通常就是迭代的方法。
如:计算n的阶乘。
int Fact(int n)
{
int i=0;
int ret=1;
for(i=1;i<=n;i++)
{
ret*=i;
}
return ret;
}
这个代码效率会比递归更好。

1772

被折叠的 条评论
为什么被折叠?



