LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 647|回复: 5

我怎么老是看不懂这段代码呢?!高手帮忙那??!!

[复制链接]
发表于 2005-3-22 15:03:32 | 显示全部楼层 |阅读模式
小弟新手
#include <stdio.h>
#define MAXN   10

int a[MAXN];

void comb (int m,int k)
{
   int i,j;
   for (i = m; i >= k;i--){
      a[k] = i;
      if (k > 1)
         comb(i - 1, k - 1);
      else
         for (j = a[0]; j > 0; j--)
            printf ("%4d",a[j]);
         printf ("\n");
   }
}

void main ()
{
   clrscr();
   a[0] = 3;
   comb(5, 3);
}

:ask
发表于 2005-3-22 17:01:07 | 显示全部楼层
这样的写法,还是第一次见!
comb 中又调用了 comb
C语言不应该这样写的
回复 支持 反对

使用道具 举报

发表于 2005-3-22 17:30:05 | 显示全部楼层
递归调用,看看基础的知识吧。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-3-22 22:00:33 | 显示全部楼层
Post by zbw76
递归调用,看看基础的知识吧。


就是不懂才拿来问的吗?!!!! :beat
回复 支持 反对

使用道具 举报

发表于 2005-3-22 22:20:58 | 显示全部楼层
这样的递归调用是可以的。
void comb (int m,int k)里调用的comb(i - 1, k - 1)是这个void comb (int m,int k)的另一个调用,与在main里的调用comb一样,都是一个新的函数调用。
也就是说comb(i - 1, k - 1)与comb(5, 3)不发生关联,他们都是void comb (int m,int k)类型的子函数,都单独使用一块内存空间。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-3-23 13:18:57 | 显示全部楼层
今天早上终于看懂了!!!谢谢各位了!!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表