思考了3天的代码实在是不明白其中的一些问题,请教大家一下,拜托了!
程序代码:#include <stdio.h>
void prt(int n)
{
int a=0;
static int sb;
if (n)
{
a=++sb;
prt(n-1);
}
else a=sb+1;
printf(" %*c",a,'*');
for (a=0;a<2*n;a++)
putchar('*');
putchar('\n');
}
int main(void)
{
prt(3);
return 0;
}
最近学习递归,在网上看到一位朋友是这样写的,不过小弟看了3天有些地方还是不明白。n一开始从3到0这个知道,但是最后为什么从0又到3了?还希望大神们帮忙解释下这个程序是怎么实现的,多谢!!
递归分两个阶段,第一阶段是递推,第二阶段是回归,n 从 0 变回到 3 就是回归的过程,可以一步步的画出来,多画两遍会了。我画了一下,可能不是很好,你将就着看看能看懂不。 给2楼点赞 哥斯拉不说话 发表于 2015-5-17 17:35
递归分两个阶段,第一阶段是递推,第二阶段是回归,n 从 0 变回到 3 就是回归的过程,可以一步步的画出来, ...
多谢!明白了,递归的时候n虽然在变化,但是在内存中一直保留是这样吗? sub688 发表于 2015-5-27 02:07
多谢!明白了,递归的时候n虽然在变化,但是在内存中一直保留是这样吗?
是啊,肯定是一直保留啊,要不然程序不就乱套了吗。 {:1_1:} 给2楼点赞
页:
[1]