八.函数递归

一.栈空间的使用

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

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;
}
相关推荐
charlie114514191几秒前
现代嵌入式C++教程:C++98——从C向C++的演化(2)
c语言·开发语言·c++·学习·嵌入式·教程·现代c++
zmzb01034 分钟前
C++课后习题训练记录Day55
开发语言·c++
雨季余静5 分钟前
c语言 gb2312转utf-8,带码表,直接使用。
c语言·c语言utf8·c语言gb2312·c语言gbk·c语言gb18030·gb2312转utf8·gbk转utf8
李白同学7 分钟前
C++:继承
开发语言·c++
k***92168 分钟前
【C++】STL详解(九)—priority_queue的使用与模拟实现
开发语言·c++
速易达网络20 分钟前
基于Java TCP 聊天室
java·开发语言·tcp/ip
2401_8904430229 分钟前
Linux 基础IO
linux·c语言
Hard but lovely40 分钟前
C++11: 自定义异常&&标准异常体系&&回顾c异常处理方式
开发语言·c++
六bring个六1 小时前
文件压缩处理(一)
开发语言·c#
jianfeng_zhu1 小时前
整数数组匹配
数据结构·c++·算法