八.函数递归

一.栈空间的使用

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

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;
}
相关推荐
阿猿收手吧!1 分钟前
【C++】C++模板特化:精准定制泛型逻辑
开发语言·c++·算法
智驱力人工智能14 分钟前
货车走快车道检测 高速公路安全治理的工程实践与价值闭环 高速公路货车占用小客车道抓拍系统 城市快速路货车违规占道AI识别
人工智能·opencv·算法·安全·yolo·目标检测·边缘计算
ghie909020 分钟前
MATLAB中编写不平衡磁拉力方程
开发语言·matlab
喵手24 分钟前
Python爬虫实战:电商实体消歧完整实战 - 从混乱店铺名到标准化知识库的工程化实现,一文带你搞定!
爬虫·python·算法·爬虫实战·零基础python爬虫教学·同名实体消除·从混乱店铺名到标准化知识库
C语言小火车28 分钟前
Qt样式实现方式详解:六大方法全面解析
c语言·c++·qt·学习
weixin_4521595528 分钟前
C++与Java性能对比
开发语言·c++·算法
80530单词突击赢29 分钟前
C++哈希表实现:开散列与闭散列详解
算法·哈希算法·散列表
Timmylyx051832 分钟前
类欧几里得学习笔记
笔记·学习·算法
会叫的恐龙32 分钟前
C++ 核心知识点汇总(第一日)(输入输出与变量、类型转换)
开发语言·c++
wangluoqi34 分钟前
26.2.2练习总结
算法