题目:实现如下图所示的星号点号的交错打印
*
*.*.
*..*..*..
*...*...*...*...
*....*....*....*....*....
*.....*.....*.....*.....*.....*.....
规律:每行星号之间点号的个数为该行星号总数的个数减1
代码如下:双层递归实现
void dot(int N)//实现点的打印
{
if (N == 0)//处理第一行的情况
return;
if (N == 1)
{
printf("%c", '.');
return;
}
else
{
dot(N - 1);
printf("%c", '.');
return;
}
}
void asterisk(int N1,int N2)//N2的设置是为了防止每次迭代改变dot()函数中的参数
{
if (N1 == 1)
{
printf("%c", '*');
dot(N2);
return;
}
else
{
asterisk(N1 - 1,N2);//打印星号
printf("%c", '*');
dot(N2);
return;
}
}
测试:
void main()
{
for (int i = 1; i < 9; ++i)
{
asterisk(i, i - 1);
printf("\n");
}
getchar();
}
测试结果: