编程练习——杨辉三角

输出杨辉三角形

  • 时间限制:1秒
  • 空间限制:32768K

描述

输入 n 值,使用递归函数,求杨辉三角形中各个位置上的值。

  • 输入描述:一个大于等于 2 的整型数 n。

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

  • 例如,输入 6,输出:

    1 1
    1 2 1
    1 3 3 1
    1 4 6 4 1
    1 5 10 10 5 1
    

分析

在这里插入图片描述

写代码之前,我们需要了解杨辉三角的几个特性:

  • 第 n 行有 n 个数字;
  • 每行的第一个和最后一个数字都是 1;
  • 每个数等于它上方两数之和。

因此,利用递归函数可以很方便地实现杨辉三角的计算。我们定义一个函数 yhtriangle(i, j),接收两个参数 i 和 j,函数返回第 i 行、第 j 列的值。

C代码实现

#include 

typedef unsigned int uint;

/* 返回第i行第j列的值 */
static uint yhtriangle(uint i, uint j)
{
	if(j > i)  return 0;  /* 第i行有且只有i个值 */
	if(j == 1) return 1;  /* 每行第一个值都是1 */
	if(j == i) return 1;  /* 每行最后一个值也是1 */
	
	/* 每个数等于它上方两数之和 */
	return (yhtriangle(i-1, j-1) + yhtriangle(i-1, j));
}

int main(void)
{
	uint n, i, j, run_time;
	clock_t begin, end;

	printf(">> ");
	scanf("%u", &n);
	printf("\n");

	begin = clock();

	/* 输出杨辉三角 */
	for(i=2; i<=n; i++) {
		for(j=1; j<=i; j++) {
			printf("%u ", yhtriangle(i, j));
		}
		printf("\n");
	}
	end = clock();

	/* 统计算法执行时间 */
	run_time = (end - begin) * 1000.0 / CLOCKS_PER_SEC * 1000;
	printf("\ntime=%uus\n", run_time);

	return 0;
}

代码编译执行如下:

在这里插入图片描述

你可能感兴趣的:(算法)