目录
1、接受一个无符号整型值,按照顺序打印它的每一位。如:输入1234,输出:1 2 3 4
什么是递归
程序调用自身的编程技巧称为递归。一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂问题层层转化为一个与原来问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。主要思想:大事化小
递归的必要条件
1、存在限制条件,当满足这个限制条件的时候,递归便不再继续
2、每次递归调用之后越来越接近这个限制条件
注意:每次递归都是要调用一次函数,则每次需要在栈区分配空间。如果调用的递归非常多,会导致栈区空间不够,栈溢出而报错
例题
1、接受一个无符号整型值,按照顺序打印它的每一位。如:输入1234,输出:1 2 3 4
思路:
void print(unsigned int n)
{
if(n>9)
print(n/10);
printf("%d ",n%10)
}
int main()
{
unsigned int num=0;
scanf("%u",&num);
print(num);
return 0;
}
说明:一直自己调用自己,满足限制条件,递归结束,再层层返回
2、编写函数不允许创建临时变量,求字符串长度
思路:
int my_strlen(char* str)
{
if(*str!='\0')
return 1+my_strlen(str+1);
else
return 0;
}
int main()
{
char arr[]="abc";
printf("%d\n",my_strlen(arr));
return 0;
}
3、递归实现n!
int fac(int n) { if(n<=1) return 1; else return n*fac(n-1) } int main() { int num; scanf("%d",&num) printf("%d",fac(num)); }
int fac(int n)
{
if(n<=1)
return 1;
else
return n*fac(n-1)
}
int main()
{
int num;
scanf("%d",&num)
printf("%d",fac(num));
}