栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

数据结构-C语言代码 day7-递归的应用

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

数据结构-C语言代码 day7-递归的应用

一、递归 1、递归是什么?

简单来说,就是一个函数直接或间接调用自身的一种方法。通常递归可以将一个复杂的大型问题层层转化为一个与原问题相似的规模较小的问题来求解。它的核心思想是把大事化小。

2、递归思想

(1)、递

将问题分解为若干个规模较小并与原问题形式相同的子问题,这些问题可以用相同的方法来解决。

(2)、归

当问题不断缩小规模的时候,一定有一个明确的结束递归的临界点,一旦达到这个临界点就从该点一路返回,最终到原点,问题得以解决!

3、递归的图解分析 4.递归的必要条件 

(1)、递归出口:即存在限制条件当满足这个条件时,递归不再继续。

(2)、问题规模不断缩小:即每次调用完递归后越来越接近这个限制条件。 

二、递归应用  1、累加的递归实现
#include

int addto(int n)
{
	if(n<=0)
	return 0;

	else
	return addto(n-1)+n;
}

void addtoTest()
{
	int n;
	printf("rn--test starts!--rn");

	n=5;
	printf("nAdd from 0 to %d to get %dn",n,addto(n));
	
	n=1;
	printf("Add from 0 to %d to get %dn",n,addto(n));
	
	n=-2;
	printf("Add from 0 to %d to get %dn",n,addto(n));
	
	printf("rn--end of test!--rn");
}

int main()
{
	addtoTest();
}
运行结果
--test starts!--

Add from 0 to 5 to get 15
Add from 0 to 1 to get 1
Add from 0 to -2 to get 0

--end of test!--
2、汉诺塔问题

(1)、 汉诺塔打印步数 O()

原理:
1.将n-1个碟子从A杆经C杆移动到B杆
2.将A杆上的第n个碟子移动到C杆
3.将n-1个碟子从B杆经A杆移动到C杆

代码实现 

#include
int Hanio_twice(int n)
{
	if(1 == n)
		return 1;
	else
		return 2 * Hanio_twice(n - 1) + 1;
}
int main()
{
	int n = 0;	
	scanf("%d", &n);//塔数
	int ret = Hanio_twice(n);
	printf("完成%d层的汉诺塔需要%d步n", n, ret);
	return 0;
}

(2)、 汉诺塔打印步骤 

原理:封装1个函数Hanio(n, ‘A’, ‘B’, ‘C’)。
其中n是塔数;A、B、C,3个字符为抽象成的3个柱子。
如果只有1层那么输出A;
否则就有2种情况,其1是将n-1个碟子从A经C到B。其2是将n-1个碟子从B经A到C

代码实现 

#include
void Hanio_Step(int n, char A, char B, char C)
{
	if (1 == n)
		printf("%c->%cn", A, C);
	else if(n <= 0)
	    return;
	else
	{
		Hanio_Step(n-1, A, C, B);
		printf("%c->%cn", A, C);
		Hanio_Step(n-1, B, A, C);
	}
}
int Hanio_twice(int n)
{
	if(1 == n)
		return 1;
	else
		return 2 * Hanio_twice(n - 1) + 1;
}
void Hanio_Test()
{
	printf("rn--begin!--rn");
	
	printf("n2 platesrn");
	printf("完成要%d步n",Hanio_twice(2));
	Hanio_Step(2, 'A', 'B', 'C');
	
	printf("nnextn");
	
	printf("n3 platesrn");
	printf("完成要%d步n",Hanio_twice(3));
	Hanio_Step(3, 'A', 'B', 'C');
	
	printf("rn--end!--rn");
}
int main()
{
	Hanio_Test();
}

测试结果

--begin!--

2 plates
完成要3步
A->B
A->C
B->C

next

3 plates
完成要7步
A->C
A->B
C->B
A->C
B->A
B->C
A->C

--end!--

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/875048.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号