输出杨辉三角形
- 时间限制: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 <stdio.h>
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;
}
代码编译执行如下: