递归三例

本文深入探讨了递归算法的应用,通过具体的例子如汉诺塔问题和排列产生器展示了递归的基本原理。此外,还介绍了如何使用霍纳规则来计算多项式,强调了递归在解决复杂问题时的有效性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基例在最低处:如:阶乘,汉诺塔。

例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];

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值