八.函数递归

一.栈空间的使用

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

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;
}
相关推荐
梵刹古音几秒前
【C语言】 指针与数据结构操作
c语言·数据结构·算法
VT.馒头6 分钟前
【力扣】2695. 包装数组
前端·javascript·算法·leetcode·职场和发展·typescript
小镇敲码人9 分钟前
剖析CANN框架中Samples仓库:从示例到实战的AI开发指南
c++·人工智能·python·华为·acl·cann
萧鼎10 分钟前
Python 包管理的“超音速”革命:全面上手 uv 工具链
开发语言·python·uv
Anastasiozzzz39 分钟前
Java Lambda 揭秘:从匿名内部类到底层原理的深度解析
java·开发语言
刘琦沛在进步43 分钟前
【C / C++】引用和函数重载的介绍
c语言·开发语言·c++
机器视觉的发动机1 小时前
AI算力中心的能耗挑战与未来破局之路
开发语言·人工智能·自动化·视觉检测·机器视觉
HyperAI超神经1 小时前
在线教程|DeepSeek-OCR 2公式/表格解析同步改善,以低视觉token成本实现近4%的性能跃迁
开发语言·人工智能·深度学习·神经网络·机器学习·ocr·创业创新
R_.L1 小时前
【QT】常用控件(按钮类控件、显示类控件、输入类控件、多元素控件、容器类控件、布局管理器)
开发语言·qt
Zach_yuan1 小时前
自定义协议:实现网络计算器
linux·服务器·开发语言·网络