会使用for循环,while循环来写九九乘法表,那么如何才能使用递归来完成九九乘法表的输出?
什么是递归?递归(recursion)就是程序调用自身的编程技巧。递归做为一种算法在程序设计语言中广泛应用。 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。
首先九九乘法表结构如图所示:
我们可以倒着来一层一层的拆分,可以发现每一列都逐渐减少,从9减到1,在第一个乘数从1开始增加到第二个乘数。
所以代码应该是这样:
//a是第几排
int i=1;
while(i<=a)
{
printf("%d * %d = %d ",i,a,a*i);
i++;
}
如果a是2,显示应该是1*2=2 2*2=4
然后我们就按照规律将a递减,因为我们倒着看的,所以a最开始是9!
a减到1就不需要再减了,所以代码如下(showlist是应该输出以及调用的函数):
if(a-1)
{
showlist(a-1);
}
为了方便,我们需要在每次调用本身的时候打个换行,所以完整的递归函数代码以及main函数应该如下:
#include
void sholist(int a);
int main()
{
showlist(9);
}
int showlist(int a){
int i=1;
while(i<=a)
{
printf("%d * %d = %d ",i,a,a*i);
i++;
}
printf("\n");
if(a-1)
{
showlist(a-1);
}
}
实现效果:
那么如何从1开始呢?
完整代码如下,我就不介绍了:
void sholist(int a);
int main()
{
showlist(9);
}
int showlist(int a){
int i=1;
if(a-1)
{
showlist(a-1);
}
while(i<=a)
{
printf("%d * %d = %d ",i,a,a*i);
i++;
}
printf("\n");
}
另外一种坑爹的格式:
void sholist(int a);
int main()
{
showlist(9,1);//这一排9个数,从1开始递增
}
int showlist(int len,int begin){
int i=begin;//起始位置
int j=len;//长度
int count=1;//正常开始位置
while(1)
{
if(count>=begin&&count
printf("%3d",begin*count);
else if(count>=begin+len)
break;
else
printf(" ");
count++;
}
printf("\n");
if(len-1)
{
showlist(len-1,begin+1);
}
}