八.函数递归

一.栈空间的使用

先使用高地址,再使用低地址

cpp 复制代码
#include <stdio.h>

int main()
{
    int i = 0;
    int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
    printf("%p\n", &i);
    printf("%p\n", &arr[0]);
    printf("%p\n", &arr[9]);

    for (i = 0; i <= 12; i++)
    {
        arr[i] = 0;
        printf("hehe\n");
    }
    return 0;
}

这就是release下的优化,地址大小可能会发生变化

二.什么是递归

cpp 复制代码
int main()
{
	printf("hehe\n");
	main();
	return 0;
}

三.递归的限制条件

四.递归举例

1.阶乘递归

cpp 复制代码
int Fact(int n)
{
	if (n == 0)
		return 1;
	else
		return n* Fact(n - 1);
}

int main()
{
	int n = 0;
	scanf("%d", &n);//输入3
	int ret = Fact(5);
	printf("%d\n", ret);

	return 0;
}

2.顺序打印一个整数的每一位

cpp 复制代码
void Print(int n)//1234
{
	if (n > 9)
	{
		Print(n / 10);
	}
	printf("%d ", n % 10);
}

int main()
{
	int n = 0;
	scanf("%d", &n);
	//输入一个整数n,按照顺序打印整数的每一位。
	Print(n);

	//while (n)
	//{
	//	printf("%d ", n % 10);
	//	n = n / 10;
	//}

	return 0;
}

五.递归与迭代

cpp 复制代码
//用迭代的方式实现的

int Fact(int n)
{
	//循环产生1~n的数字就可以
	int i = 0;
	int ret = 1;
	for (i = 1; i <= n; i++)
	{
		ret = ret * i;
	}
	return ret;
}

int main()
{
	int n = 0;
	scanf("%d", &n);
	int ret = Fact(n);
	printf("%d\n", ret);

	return 0;
}
cpp 复制代码
int count = 0;

int Fib(int n)
{
	if (n == 3)
		count++;

	if (n <= 2)
		return 1;
	else
		return Fib(n - 1) + Fib(n - 2);
}

int main()
{
	int n = 0;
	scanf("%d", &n);
	int ret = Fib(n);
	printf("%d\n", ret);
	printf("count = %d\n", count);

	return 0;
}
cpp 复制代码
//迭代的方式
int Fib(int n)
{
	int a = 1;
	int b = 1;
	int c = 1;

	while (n>=3)
	{
		c = a + b;
		a = b;
		b = c;
		n--;
	}
	return c;
}

int main()
{
	int n = 0;
	scanf("%d", &n);
	int ret = Fib(n);
	printf("%d\n", ret);

	return 0;
}
cpp 复制代码
void test(int n)
{
	if (n <= 10000)
		test(n+1);
}

int main()
{
	test(1);
	return 0;
}
相关推荐
晓蛋2 天前
c语言指的是什么意思
c语言·编译器·编程开发·集成开发环境·程序实例
倒头就睡的小比特2 天前
算法竞赛C++常用的STL
c++·算法
weilx12342 天前
C++笔记-文件IO-<fcntl.h>
c++
小羊没烦恼!2 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
傲世仙尊2 天前
目录即文件-Ext文件系统收尾篇
linux·c语言
牵猫散步的鱼儿2 天前
重载、重写(覆盖)、重定义区别
c语言
伞伞悦读2 天前
【第38期】Python 模块与包详解:import、from、模块搜索路径、包结构和 __init__
开发语言·python
猎头南楼2 天前
知识社区推荐系统实践:新用户冷启动与长短期兴趣建模的挑战 资深推荐算法工程师
人工智能·深度学习·算法·机器学习
phltxy2 天前
C 语言指针:从内存地址到灵活的数据访问
c语言
Smileyqp沛沛2 天前
前端?C++ ?较大差异基础罗列
c++·基础·前端转c++