| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 888 人关注过本帖
标题:(分享) 递归求排列
取消只看楼主 加入收藏
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
结帖率:94.72%
收藏
已结贴  问题点数:20 回复次数:1 
(分享) 递归求排列
这代码网络上随处可见,不过我分享的不只是递归,更重要的是分享 分析递归 的方法。/
排列、组合、子集都是常见的面试题,我希望能够帮助大家轻松的秒杀那些小菜鸟。
#include <stdio.h>
#include <string.h>

#define NUM 4
#define MAX_DEPTH 2

int mark[NUM+1] = {0};
int printList[NUM+1] = {0};

FILE* Log;

void bgOpenLog(void);

void bgWriteLog(const char* s);

void bgCloseLog(void);

void perm(int depth);

int main(void)
{
    bgOpenLog();

    perm(1);

    bgCloseLog();

    getchar();

    return 0;
}

void perm(int depth)
{
    char s[40] = {0};
    int i, j, k;

    for (i = 1; i <= NUM; i++)
    {
        if (!mark[i])
        {
            for (k = 0; k < depth; k++)
            {
                bgWriteLog("    ");
            }

            sprintf(s, "perm: (%d): %d", depth, i);
            bgWriteLog(s);
            bgWriteLog("\r\n");

            mark[i] = 1;
            printList[depth] = i;

            if (depth < MAX_DEPTH)
            {

                perm(depth+1);
            }
            else
            {
                for (j = 1; j <= MAX_DEPTH; j++)
                {
                    printf("%d ", printList[j]);
                }

                printf("\n");
            }

            mark[i] = 0;
        }
    }
}

void bgOpenLog(void)
{
    if(Log == NULL)
       Log = fopen("log.txt", "wb");
}

void bgWriteLog(const char* s)
{
    fwrite(s, sizeof(char), strlen(s), Log);
}

void bgCloseLog(void)
{
    fclose(Log);
    Log = NULL;
}

递归调用过程
    perm: (1): 1
        perm: (2): 2
        perm: (2): 3
        perm: (2): 4
    perm: (1): 2
        perm: (2): 1
        perm: (2): 3
        perm: (2): 4
    perm: (1): 3
        perm: (2): 1
        perm: (2): 2
        perm: (2): 4
    perm: (1): 4
        perm: (2): 1
        perm: (2): 2
        perm: (2): 3

[ 本帖最后由 BlueGuy 于 2011-1-7 22:50 编辑 ]
搜索更多相关主题的帖子: 面试 秒杀 include return 小菜 
2011-01-06 21:03
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
写一句话与大家共勉, "想写好程序,数据结构和算法一定得过关"

我就是真命天子,顺我者生,逆我者死!
2011-01-06 22:35
快速回复:(分享) 递归求排列
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021684 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved