递归

本文探讨了递归和递推的区别,递归是一种自顶向下解决问题的方法,而递推则是由已知推导未知。通过汉诺塔问题和全排列问题的递归解决方案,展示了递归在算法中的应用。汉诺塔问题的递归解法巧妙地将大问题分解为小问题,全排列则通过递归交换元素实现了所有可能的组合。这两个经典问题揭示了递归在解决复杂问题时的强大能力。

引入一下递归,递归与递推是两个概念,那么两者之间有什么区别呢?递推是由已知推->未知,递归是由未知解决未知递归的特点是1.有问题之间的规律,2.有出口,下面是几道经典的递归问题
(汉诺塔问题)

void hnt(int n,char from,char mid,char to){
	if(n==1) cout<<from<<"->"<<to<<"\n";
	else{
		hnt(n-1,from,to,mid);
		cout<<from<<"->"<<to<<"\n";
		hnt(n-1,mid,from,to);
	}
}
int main()
{
	int n;
	cin>>n;
	hnt(n,'A','B','C');
	return 0;
}

(全排列)

#include<iostream>
#include<cstring>
using namespace std;
int a[4]={1,2,3,4},ans=0;
void qpl(int k){
	if(k==4){
		for(int i=0;i<4;i++) cout<<a[i]<<" ";
		cout<<"\n";
		ans++;
	}
	for(int i=k;i<4;i++){
		int t=a[k];a[k]=a[i];a[i]=t;
		qpl(k+1);
		t=a[k];a[k]=a[i];a[i]=t;
	}
}
int main()
{
	qpl(0);
	cout<<ans;
	return 0;
}	
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值