引入一下递归,递归与递推是两个概念,那么两者之间有什么区别呢?递推是由已知推->未知,递归是由未知解决未知,递归的特点是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;
}
本文探讨了递归和递推的区别,递归是一种自顶向下解决问题的方法,而递推则是由已知推导未知。通过汉诺塔问题和全排列问题的递归解决方案,展示了递归在算法中的应用。汉诺塔问题的递归解法巧妙地将大问题分解为小问题,全排列则通过递归交换元素实现了所有可能的组合。这两个经典问题揭示了递归在解决复杂问题时的强大能力。
1008

被折叠的 条评论
为什么被折叠?



