对递归过程的理解

引入一道经典的递归问题:
在这里插入图片描述
代码展示:

#include <iostream>
#include <algorithm> //引入算法库
int maxsum(int i, int j);
using namespace std;
int n;//定义总行数
const int index = 100;
int a[100][100];
int main()
{
	cout << "请输入三角形" << endl;
	int i,j;
	cin >> n;
	for(i=1;i<=n;i++)
		for (j = 1;j <= i; j++)
		{
			//a[i][j] << cin;  这种不行
			cin >> a[i][j];
		}
	cout <<maxsum(1,1)<<endl;
	return 0;
	
}
int maxsum(int i, int j)
{
	if (i == n)
		return a[i][j];
		int x = maxsum(i + 1, j);//理解递归问题很关键
		int y = maxsum(i + 1, j + 1);
	return max(x,y) + a[i][j];

}

理解:
调用maxsum(1,1)时,进入子函数中,此时又将进入子函数的子函数,此时i=2,j=1;然后又再次进入子函数,此时i=3,j=1;返回a[3][1]的值给x(x时i=2,j=1时的x),注意此次处于i=2,j=1的情况,此后运行y=xxxx语句,一步一步递归,得到最终解;

发布了23 篇原创文章 · 获赞 17 · 访问量 4181

猜你喜欢

转载自blog.csdn.net/qq_43786066/article/details/104214097