基例在最低处:如:阶乘,汉诺塔。
例1.
//汉诺塔问题
enum tower{ A='A', B='B', C='C'};
void TowerOfHanoi(int n, tower x, tower y, tower z)
{
if(n>0)
{
TowerOfHanoi(n-1, x, z, y);
cout<<"move top disk from tower "<<char(x)
<<" to top of tower "<<char(y)<<endl;
TowerOfHanoi(n-1, z, y, x);
}
}
基例在最高处:如:排列产生器,利用霍纳规则计算多项式
例2.
//排列产生器:给定n个元素的集合,要求输出该集合所有可能的排列
void Perm(Type a[], int k, int n)
{//基例为最后一个,添加一个参数k向上增
if(k==n)
{//output permutation
for(int i=0; i<n;i++)
cout<<a[i]<<" ";
cout<<endl;
}
else//a[k:n] has more than one permutation.
//Generate these recursively
for(int i=k; i<n;i++)
{
Type t=a[k];
a[k]=a[i];
a[i]=t;
Perm(a, k+1, n);
t=a[k];
a[k]=a[i];
a[i]=t;
}
}
例3.
//利用霍纳规则计算多项式
float polynomial(float *a, int n, float x0)
{//数组a为多项式的系数向量,阶数由高到低
return HuoNa(a, n, 0, x0);
}
float HuoNa(float *a, int n, int k, float x0)
{//基例为最后一个,添加一个参数k向上增
if(n-1==k)
return a[n-1];
else
return HuoNa(a, n, k+1, x0)*x0+a[k];
}