数字三角形 递归

数字三角形 递归

/*
 递归过程看了半天。。。
 a little weak。。。
 总体过程是这样的:
 从上而下对其下层的正下方的元素和其正下方的右边的那个元素进行比较
 返回较大(小)的
 如果其下层已经是最后一层就直接返回,否则就调用其自身形成递归
 数学差,真可怕! 
 */
#define LOCAL
#include<iostream>
using namespace std;
#define N 100
int a[N][N];
int sum(int i, int j, int n)
{
	int left, right;
	if (i == n - 1)
		return a[i][j];
	if ((left = sum(i + 1, j, n)) > (right = sum(i + 1, j + 1, n)))
		return left + a[i][j];
	else
		return right + a[i][j];
}
int main()
{
#ifdef LOCAL
	freopen("input.txt", "r", stdin);
	freopen("output.txt", "w", stdout);
#endif

	int i, j, n;
	while (cin >> n)
	{
		for (i = 0; i < n; i++)
		{
			for (j = 0; j <= i; j++)
				cin >> a[i][j];
		}
		cout << sum(0, 0, n) << endl;
	}
	return 0;
}

发表回复