int main()
{
printf("hehe\n");
main();
递归作为一种算法,一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法
他通常把一个大型复杂问题转化为一个与原问题相似的规模较小的问题来求解
void print(int n)
{
if (n > 9)
{
print(n / 10);//1%10=1//自己调用自己
}
printf("%d ", n % 10);
}
int main()//按照顺序打印他的每一位
{
unsigned int num = 0;//unsigned 接受一个整形值(无符号)
scanf("%d", &num);
print(num);
编写函数不允许创建零时变量,求字符串长度
int my_strlen(char* str)//此时传过来的是arr数组的地址
{
int count = 0;
while (*str != '\0')
{
count++;
str++;
}
return count;
}
不用临时变量
int my_strlen(char* str)//此时传过来的是arr数组的地址
{
if (*str != '\0')
return 1 + my_strlen(str + 1);//str+1说的是i的地址
return 1 +return 1 +return 1 + my_strlen(str + 1)最终结果
else
return 0;//问题t的位置是怎么计算的
第一次进来*str=b;
}
int main()
{
char arr[] = { "bit" };
int len = my_strlen(arr);//arr是数组,数组传参,传过去的是第一个元素的地址
printf("len=%d\n", len);
return 0;//输出错误,错误类型:栈溢出
内存划分区:栈区放局部变量,函数形参//函数调用都在栈区申请空间
堆区:动态开辟的内存,malloc calloc
静区:全局变量,static修饰的变量
每次向栈区申请空间,当栈空间被耗干,抛出问题,stack overflow:栈溢出
}
递归的俩个必要条件
1.存在限制条件,当满足这个限制条件的时候,递归便不再继续
2.每次递归调用后越来越接近这个限制条件