sub688 发表于 2015-5-17 16:25:21

思考了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了?还希望大神们帮忙解释下这个程序是怎么实现的,多谢!!

哥斯拉不说话 发表于 2015-5-17 17:35:50

递归分两个阶段,第一阶段是递推,第二阶段是回归,n 从 0 变回到 3 就是回归的过程,可以一步步的画出来,多画两遍会了。我画了一下,可能不是很好,你将就着看看能看懂不。

json 发表于 2015-5-17 23:34:12

给2楼点赞

sub688 发表于 2015-5-27 02:07:53

哥斯拉不说话 发表于 2015-5-17 17:35
递归分两个阶段,第一阶段是递推,第二阶段是回归,n 从 0 变回到 3 就是回归的过程,可以一步步的画出来, ...

多谢!明白了,递归的时候n虽然在变化,但是在内存中一直保留是这样吗?

哥斯拉不说话 发表于 2015-5-27 06:57:03

sub688 发表于 2015-5-27 02:07
多谢!明白了,递归的时候n虽然在变化,但是在内存中一直保留是这样吗?

是啊,肯定是一直保留啊,要不然程序不就乱套了吗。

溯月0503 发表于 2015-5-27 09:06:09

{:1_1:}

2413780002 发表于 2015-5-27 12:24:30

给2楼点赞
页: [1]
查看完整版本: 思考了3天的代码实在是不明白其中的一些问题,请教大家一下,拜托了!