25C++函数(3)——教学

一、递归算法

第77课 交作业啦
快下课了,狐狸老师想批改第1小组的作业,于是对坐1组1号的尼克同学说:“交作业啦!”,尼克转过去对第2位同学说:“交作业啦!”,第2位同学转过去对第3位同学说:“交作业啦!”····第6位同学转过去对第7位同学说:“交作业啦!”,第7位是格莱尔同学,她是1组最后一位同学,于是,她把自己的作业交给了第6位同学,第6位同学把收到的作业连同自己作业交给第5位同学···第2位同学把收到的作业连同自己作业交给第1位同学,第1位尼克同学把收到的作业连同自己作业交给狐狸老师,作
业终于收好了,如下图所示。

在C++里,也有类似的用法——递归算法。递归算法是一种“自己调用自己” “有去有回”的算法,它在调用一个函数的过程中又出现直接或间接的调用该函数本身,但调用的过程不是一个无休止的,而是有限次数的,总有一次是要终止调用的,一般用if语句来控制。
利用进归算法,试编一程序,算一算我收到多少本作业?
zuoye(1)=zuoye(2)+1
zuoye(2)=zuoye(3)+1
zuoye(3)=zuoye(4)+1
zuoye(4)=zuoye(5)+1
zuoye(5)=zuoye(6)+1
zuoye(6)=zuoye(7)+1
zuoye(7)=1
求解分两步,第1步是“递归前进”,第2步“递归返回”,如图所示。

#include <iostream>                      
using namespace std;   
int zuoye(int n)
{  
  if(n==7)
    return 1;
  else
    return zuoye(n+1)+1;
}
int main()
{
  cout<<zuoye(1)<<endl;
  return 0;
}

二、递归算法及子函数的声明

第78课 通力合作的100个数
利用通归算法,试编一程序,输出1~100的自然数。
让我光来模拟一下吧。
100说:要输出我100,那得先输出99。99说:要输出我99,那得先输出98。98说:要输出我98,那得先输出97。.....
2说:要输出我2,那得先输出1。1说:好的,我马上输出1。
接着,
1说:我输出1,接下来轮到2。2说:我输出2,接下来轮到3。3说:我输出3,接下来轮到4。.....
99说:我输出99,接下来轮到100。100说:我输出100,谢谢大家通力合作,大功告成!

#include <iostream>
#include <iomanip>
using namespace std;
int show(int n);         //对子函数的声明
int main()
{
 int n=100;
 show(n);
 return 0;
}
int show(int n)
{
 if(  )         ;
 cout<<setw(5)<<n;
}

由于被调用的自定义函数show()在调用它的主函数main()的后面,所以在主函数main()的前面,需要对函数show()先进行声明,否则就会发生错误。

三、递归求最大值

第79课 谁是老大

输入5个整数,用递归算法求出最大值。

如,输入5个数:88 92 98 99 85

最大的数是:99

#include <iostream>
using namespace std;
int max(int a[],int n)
{
  int t;
  if(n==1)
    t=a[1];
  else
    if(    )
                ;
    else
                ;    
  return t;
}
int main()
{
  int a[6];   //为了便于理解,a[0]不用。
  cout<<"请输入5个数:"<<endl; 
  for(int i=1;i<=5;++i)
    cin>>a[i];
  cout<<"最大的数是:"<<max(a,5)<<endl;
}
posted @ 2025-06-10 21:02  gdyyx  阅读(27)  评论(0)    收藏  举报