杨辉三角_递归实现_附源程序

#include"stdio.h"
#include "stdlib.h"
#include"conio.h"
int Try(int n, int k)//递归函数
{ if (k == 0 || k == n)//在左右两侧返回1
return 1; //递归出口
return Try(n-1,k-1) + Try(n-1,k);//返回递归公式
}

void print_spack(int t,int mode=0)//显示空格函数,这个是杨辉三角格式控制的关键
{
if (mode!=0)//当mode不等于0时,代表要输出每行前面的空格,直接循环输出t次空格,并退出函数
{
for (int i = 0; i < t; i++)
{
printf(" ");
}
return ;//直接返回
}A

if(t<10) printf(" ");//这儿相信大家应该能看懂的吧,我随意设置的!
else if (t>9&&t<100)printf(" ");//但是记住规则:每一行最开始部分的空格减少了k个,那么当t为个位数时输出k+2个空格
else if(t>99&&t<1000)printf(" ");//其他t的情况依次递减就行了
else if(t>999&&t<10000)printf(" ");//如,我在此设计的每行开头部分减少3个空格,那么t<9时输出5个空格,t>9&&t<100时输出4个空格,其他递减
else if(t>9999&&t<100000)printf(" ");

}
void scan(int row)//杨辉三角扫描输出函数
{
int t = 0 ;
if (row>10)//当行数大于10行时,应该将窗口尺寸该大到150,以保证杨辉三角正常显示,这是一条dos命令,使用system函数推送执行的
{
system("mode con cols=150 lines=150");
}
for (int n=0; n{
print_spack(3*(row-n),1);//后面第二个参数传了一个非零参数,是因为告诉函数要直接输出3*(row-n)个空格
for (int m=0; m<=n; m++)//输出中间元素
{
printf("%d",t = Try(n,m));//递归调用获得当前第n行,第m个元素的值,输出同时赋值给t
print_spack(t);//这儿没有传第二个参数是告诉函数,需要判断t参数的位数来决定输出的空格
}
printf("\n");//每行结束后打印一个回车
}
}
void main()
{
int x = 0;
while (true)
{
printf("\n递归实现杨辉三角!\n本程序不能大于20行。超过这个数,不是人能看的懂的!\n请输入杨辉三角的行数:(输入-1结束程序)");
scanf("%d",&x);//输入行数
if (x==-1)
{
exit(0);
}
system("cls");
scan(x);//扫描输出

}
}


相关文档
最新文档