递归---汉诺塔(C++)

void Hanoi_move(int n,char A,char B,char C){
	//A上的n个圆盘移动到C上
	//B为辅助放置位置
	//解:n=1:A->C
	//n>1: n-1个 A->B
	if(n==1){//递归结束的标志 
		cout<<A<<" -> "<<C<<endl;
	}else{
		Hanoi_move(n-1,A,C,B);//将n-1个圆盘放置到辅助B位置
		cout<<A<<" -> "<<C<<endl;//移动第n个到C位置
		Hanoi_move(n-1,B,A,C);//将n-1个圆盘放置到C位置
	}
}

递归:

1、将一个问题分解成有限个最简处理的子问题(其中每一步都要用到前一步或前几步的结果),同时所有子问题的处理方式一致;

f(n)=f(f(n-1))=……=f(f(……f(1)))

2、处理方式是由内到外-----先运算最内层的函数,依次运算到最外层

3、保存最内层或上一层运算结果时运用的系统栈,即通用系统栈(函数栈+数据栈)

4、将递归改写为非递归时,需自定义栈来实现非递归(递归的处理数据量足够大时,将导致函数栈溢出而死机,栈的大小是固定的)

5、非递归也可以看作一种将栈“显化”的递归方式(栈的大小自定义)

6、待修改+补充

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值