今天才发现上次对递归栈的理解自己写了一个小程序,不知道为什么没发上来,今天补一下。
/*Author:shizhixin
Email:szhixin@gmail.com
Blog:http://blog.csdn.net/ShiZhixin
Date:Nov 30,2009
Function:使用递归调用求数组的最大值,了解递归的栈调用以及递归函数的具体执行过程*/
#include "stdafx.h"
#include <iostream.h>
#include <math.h>
int MaxArray(int n, int A[])
{
int max;
if (n == 1)
return A[0];
else
{
max=MaxArray(n-1, A);
if(max>A[n-1])
{
return max;
}
else
{
return A[n-1];
}
}
}
void main()
{
int a[4]={3,5,14,7};
cout<<MaxArray(4,a);
}
在调试状态下使用call stack查看栈的调用过程:(图片就不发了,就看看过程吧)
MaxArray(int 1, int * 0x0012ff70) line 43
MaxArray(int 2, int * 0x0012ff70) line 46 + 16 bytes
MaxArray(int 3, int * 0x0012ff70) line 46 + 16 bytes
MaxArray(int 4, int * 0x0012ff70) line 46 + 16 bytes
main() line 61 + 11 bytes
mainCRTStartup() line 206 + 25 bytes
KERNEL32! 7c816d4f()
程序执行路径:
cout<<MaxArray(4,a);
int MaxArray(int n, int A[])
{
int max;
if (n == 1) //n=4
return A[0];
else
{
max=MaxArray(n-1, A);
///
{
int max;
if (n == 1) //n=3
return A[0];
else
{
max=MaxArray(n-1, A);
//
{
int max;
if (n == 1) //n=2
return A[0];
else
{
max=MaxArray(n-1, A);
///
{
int max;
if (n == 1) //n=1
return A[0]; //1结束,开始返回
} //n=1
//
max=MaxArray(n-1, A);//注意返回地址是这里!!!而且此时n=2,max为n=1时的返回值
if(max>A[n-1])
else
{
return A[n-1];
}
//
max=MaxArray(n-1, A); //n=3
if(max>A[n-1])
else
{
return A[n-1];
}
//
max=MaxArray(n-1, A); //n=4
if(max>A[n-1])
{
return max;
}
//
cout<<MaxArray(4,a);//end