1 递归
自己直接或间接调用自己的东西
2 递归常见错误
栈溢出
栈区:局部变量、函数形参
堆区:动态开辟的内存、malloc、calloc
静态区:全局变量、static修饰的变量
把一个数分开输出
void print(int n)
{
if (n>9)
{
print(n / 10);
}
printf("%d", n % 10);
}
int main()
{
unsigned int a = 0;
scanf("%d", &a);
print(a);
return 0;
}
3 递归的必要条件
存在限制条件:满足这个条件的时候,递归不再继续
每次递归之后,越来越接近这个条件
求字符串长度的非递归方式
int i_strlen(char* ch)
{
int count = 0;
while (*ch != '\0')
{
ch++;
count++;
printf("\n%d", count);
}
return count;
}
int main()
{
char inn[] = "miaomiaomiaowu";
printf("%s", inn);
int len = i_strlen(inn);
printf("%d", len);
return 0;
}
斐波那契数列
int Fib(int n)
{
if (n <= 2)
{
return 1;
}
else
{
printf("%d", n);
return (Fib(n - 1) + Fib(n - 2));
}
}
int main()
{
int a = 0;
int b = 0;
scanf("%d", &a);
printf("%d\n",a);
b = Fib(a);
return 0;
}