八.函数递归

一.栈空间的使用

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

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;
}
相关推荐
njsgcs5 分钟前
solidworks自动标注折弯4 无向图 c#
开发语言·c#·solidworks
IOT那些事儿7 分钟前
Qt5 VSCode调试
c++·vscode·mingw·qt5
地球资源数据云8 分钟前
1900-2023年中国物种分布点位矢量数据集
大数据·数据结构·数据库·数据仓库·人工智能
楼兰公子17 分钟前
读取rpi摄像头
linux·服务器·算法
c++之路18 分钟前
C++ 多线程
开发语言·c++
渡之19 分钟前
NaviLoc - GNSS 拒止环境下无人机空对地卫星视觉定位算法 论文整理
算法·无人机·飞控
CHANG_THE_WORLD23 分钟前
<Fluent Python > Unicode 文本与字节
开发语言·python
AI人工智能+电脑小能手28 分钟前
【大白话说Java面试题】【Java基础篇】第20题:HashMap在计算index的时候,为什么要对数组长度做减1操作
java·开发语言·数据结构·后端·面试·哈希算法·hash-index
凯瑟琳.奥古斯特29 分钟前
Bootstrap快速上手指南
开发语言·前端·css·bootstrap·html
leo__52032 分钟前
单载波中继系统资源分配算法MATLAB仿真程序
算法·matlab·unity