杨辉三角形(记忆化递归)


链接:https://www.nowcoder.com/practice/ef7f264886a14fdf8a6ed3ac008a23c8?tpId=40&tqId=21535&tPage=10&rp=10&ru=/ta/kaoyan&qru=/ta/kaoyan/question-ranking
来源:牛客网

题目描述

输入n值,使用递归函数,求杨辉三角形中各个位置上的值。 
输入描述:
一个大于等于2的整型数n


输出描述:
题目可能有多组不同的测试数据,对于每组输入数据,
按题目的要求输出相应输入n的杨辉三角形。

输入例子:
6

输出例子:
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5

AC code:

#include
#include
#include
#include
#include
#include
#include
#include
#include
#define LL long long
#define exp 1e-9
#define MAXN 1000010

using namespace std;

/*
int YangHui(int i,int j)
{
	if(j==1||j==i)
		return 1;
	else
		return YangHui(i-1,j)+YangHui(i-1,j-1);
}
*/
/*改进版本:记忆化递归,减少递归次数*/
int  a[1001][1001];
int YangHui(int i,int j)
{
	if(a[i][j]==0)
	{
		if(i==j||j==1)
			a[i][j]=1;
		else
		{
			a[i][j]=YangHui(i-1,j)+YangHui(i-1,j-1);
		}
	}
	return a[i][j];
}

int main()
{
//	freopen("D:\\in.txt","r",stdin);
    int i,j,n;
    memset(a,0,sizeof(a));
    while(scanf("%d",&n)!=EOF)
    {
    	for(i=2;i<=n;i++)
    	{
    		for(j=1;j<=i-1;j++)
    		{
    			printf("%d ",YangHui(i,j));
			}
			printf("%d\n",YangHui(i,i));
		}
	}
    return 0;
}


你可能感兴趣的:(递归,分治,计算机考研上机实战专栏)