首页 > 代码库 > 经典递归问题
经典递归问题
运用递归解决问题的要点:
(1)缩小问题规模(将问题分为若干步,注意构造问题间的相似性)
(2)分析递归出口
下面从一些经典的实例来分析递归问题的特征
1.从n个小球中取m个,问有多少种取法?
1 #include <iostream> 2 using namespace std; 3 4 int f(int n,int m){ 5 if(n<m) return 0; 6 if(m==0) return 1; 7 return f(n-1,m)+f(n-1,m-1); 8 } 9 int main(){ 10 int n,m; 11 cin>>n>>m; 12 cout<<f(n,m); 13 }
2.打印字符串的全排列
1 #include <iostream> 2 #include <string> 3 #include <algorithm> 4 using namespace std; 5 6 void f(string str,int k) 7 { 8 if(str.length()-1==k){ 9 cout<<str<<endl; 10 return; 11 } 12 for(int i=k;i<str.length();i++){ 13 swap(str[k],str[i]); 14 f(str,k+1); 15 swap(str[k],str[i]); 16 } 17 } 18 int main() 19 { 20 string str="abc"; 21 f(str,0); 22 return 0; 23 }
经典递归问题
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。