目录
例1:阶乘函数
#include<iostream>
using namespace std;
int f(int n)
{
if(n==0)
return 1;
else
return f(n-1)*n;
}
int main()
{
int n;cin>>n;
cout<<f(n);
return 0;
}
例2:Fibonacci数列
无穷数列1,1,2,3,5,8,13.....被称为Fibonacci数列
#include<iostream>
using namespace std;
int f(int n)
{
if(n==0||n==1)
return 1;
else
return f(n-1)+f(n-2);
}
int main()
{
int n;cin>>n;
cout<<f(n-1);//求斐波那契数列的第n个数
return 0;
}
例3:Ackerman函数
#include<iostream>
using namespace std;
int a(int n,int m)
{
if(n==1&&m==0)
return 2;
else if(n==0)
return 1;
else if(m==0)
return n+2;
else
return a(a(n-1,m),m-1);
}
int main()
{
int n,m;
cin>>n>>m;
cout<<a(n,m);
return 0;
}
例4:全排列
假设将0,1,2进行全排列:
先将0与第一位元素交换, 对后面两个元素进行全排列(递归)后,再将0与第一位元素交换回原位置;将1与第一位元素交换, 对后面两个元素进行全排列(递归),再将1与第一位元素交换回原位置;重复此步骤直到最后一个元素。
#include<iostream>
using namespace std;
void Swap(int a[],int i,int j)
{
int t=a[i];
a[i]=a[j];
a[j]=t;
}
void Printarray(int a[],int n)
{
for(int i=0;i<n;i++)
{
printf("%d ",a[i]);
}
printf("\n");
}
void Perm(int a[],int p,int q)
{
if(p==q)
{
Printarray(a,q+1);
}
else
{
for(int i=p; i<=q; i++)
{
Swap(a,p,i);
Perm(a,p+1,q);
Swap(a,p,i);
}
}
}
int main()
{
int a[]={0,1,2};
Perm(a,0,2);
return 0;
}
例5:hanoi塔问题
1.将n-1个盘子由x杆经由z杆移动到y杆,此时x杆上仅剩下第n个盘子,y杆上有n-1个盘子,z杆上无盘子;
2.将x杆上的第n个盘子移动到z杆上;
3.再将y杆上的盘子经由x杆移动到z杆上。
#include<iostream>
using namespace std;
void Move(char c1,char c2)
{
printf("%c->%c\n",c1,c2);
}
void Hanoi(int n,char x,char y,char z)
{
if(n==1)
Move(x,z);
else
{
Hanoi(n-1,x,z,y);//将x杆上n-1个盘子经由z杆移动到y杆;
Move(x,z);//将在x杆上的第n个盘子移动到z杆;
Hanoi(n-1,y,x,z);//将在y杆上的n-1个盘子经由x杆移动到z杆;
}
}
int main()
{
int n;cin>>n;//盘子个数n
Hanoi(n,'x','y','z');
return 0;
}