请帮分析一下递归函数过程
有一个递归函数求出数组里最大的数,俺没有理解,有数字序号的是俺添加的,主要是看看变量和数组值,请朋友帮分析其具体过程:
#include<iostream>
using namespace std;
int diguimax(int a[],int n)
{
int f;
if (n==1)
{
/* cout<<"n==1"<<endl; (1)*/
/* cout<<"n==1,a[0]="<<a[0]<<endl; (2)*/
return a[0];
}
f=diguimax(a+1,n-1);
/* cout<<"f="<<f<<",,a[0]="<<a[0]<<endl; (3)*/
if (f>a[0])
{
/* cout<<"f>a[0],f="<<f<<"a[0]"<<a[0]<<endl; (4)*/
return f;
}
/* cout<<"f bu dayu "<<f<<","<<a[0]<<endl; (5)*/
return a[0];
}
int main()
{
int c[]={7,29,36,28,6,-5};
cout<<diguimax(c,6)<<endl;
return 0;
}
主函数运行,diguimax(c,6)这步是调用函数diguimax( ),把数组和数组数量传递过去。
到了递归函数,由于n=6,所以第一个IF语句不成立,就到了f=diguimax(a+1,n-1);此时f=diguimax(a+1,5);a+1指向”29“,这个时候 f 好像没有被赋具体值吧,接着调用diguimax( )函数,这时n=5,第一个if 语句仍然不成立,还是f=diguimax(a+1,n-1);"a+1"指向“36”,下一次指向“28”,反复直到f=diguimax(a+1,n-1);“ a+1”指向“6”,n-1=3-1=2,再调用递归f=diguimax(a+1,n-1); “a+1”指向“-5”,n=1,再调用递归,到了第一个if 语句处,数字序号为(2) cout<<a[0]显示为"-5",到 了数字序号(3)处,f=-5, a[0]=6,这时f = -5理解,但是a[0]=6这步值怎么来的?在到数字序号(5)处:f= -5,a[0]=6,,然后return a[0]就是把a[0]=6返还给 f=diguimax(a+1,n-1)这个f ?到了下一行(3)处,则 f=6, a[0]=28到这里没有看明白,最后返回最大值为“36”,怎么递归又反向递归了啊。
请朋友帮给分析说明一下,谢谢。