现在的位置: 首页 > 综合 > 正文

递归与分治算法初步学习

2013年10月06日 ⁄ 综合 ⁄ 共 1564字 ⁄ 字号 评论关闭

1.求一个数的阶乘n!:

#include<iostream>
using namespace std;
int fac(int val);
int main(){
   int val;
   cout<<"input a number:"<<endl;
   cin>>val;
   cout<<"val! is "<<fac(val)<<endl;
}
int fac(int val){
if(val==1||val==0)
return 1;
else if(val<0){
cout<<"input error!"<<endl;
}
return val*fac(val-1);
}

2.Fibonacci数列(斐波那契数列)

112358132134。。。。。。。。

#include<iostream>
#include<iomanip>
using namespace std;
int Fibonacci(int n);
int main(){
   int n,cont=0;
   cout<<"input a number:"<<endl;
   cin>>n;
   for(int ix=0;ix!=n;++ix){
   	cout<<setw(12)<<Fibonacci(ix);
   	++cont;
   	if(cont%6==0){
   	cout<<endl;
   	cont=0;   //每七个一行 
   }
   }
   return 0;   
}
int Fibonacci(int n){
if(n==0||n==1)
return 1;
else
return Fibonacci(n-1)+Fibonacci(n-2);
}

3.Ackerman函数

#include<iostream>
using namespace std;
int Ackerman(int n,int m);
int main(){
   int n,m;
   cout<<"input two numbers:"<<endl;
   cin>>n>>m;
   for(int ix=0;ix<=n;ix++) 
      for(int iix=0;iix<=m;iix++)
          cout<<"Ackerman["<<ix<<","<<iix<<"]="<<Ackerman(ix,iix)<<endl;
   return 0;   
}
int Ackerman(int n,int m){
if(n==1&&m==0)
  return 2;
else if(n==0&&m>=0)
   return 1;
else if(n>=2&&m==0)
   return n+2;
else if(n>=1&&m>=1)
    return  Ackerman( Ackerman(n-1,m),m-1);
else 
     cout<<"Data error!"<<endl;	        
}   //有大小限制。

全排列问题

#include<iostream>
using namespace std;
void Swap(char &m,char &n)
{
char temp;
temp=m;
m=n;
n=temp;
}    //交换m和n的值并带到主函数中
void pailie(char a[],int q,int z)
{
if(q==z) 
{
for(int j=1;j<=z;j++)
cout<<a[j];
cout<<endl;
}    //如果要排列的数据只有一个了,就输出数列
else
{
        for(int i=q;i<=z;i++)
       {
                Swap(a[q],a[i]);  //将第一个元素和第i个交换
                pailie(a,q+1,z);   //递归排列下标从q+1到z的数列
                Swap(a[q],a[i]); // 恢复现场
        }
}
}
int main()
{
int yongli;
int number;
cin>>yongli;   //用例个数
for(int i=1;i<=yongli;i++)
{
char a[100];
cin>>number;
for(int j=1;j<=number;j++)	cin>>a[j];
pailie(a,1,number);
cout<<endl;
}
return 0;
}

抱歉!评论已关闭.