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()先进行声明,否则就会发生错误。
三、递归求最大值
输入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;
}

浙公网安备 33010602011771号