重学c语言8

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;
}

上一篇:python leetcode 斐波那契数列 动态规划 递归 算法


下一篇:深入浅出理解动态规划 | 交叠子问题与最优子结构