`
ackerman
  • 浏览: 74990 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

递归算法---字符串---全/部分组合和全排列

 
阅读更多

 

#include <stdio.h>
#include <string.h>
void combine(char *src, char *out,int rec, int start, int end)
{
        int i;
        if(start==end)
                return;
        for(i=start;i<end;i++){
                out[rec]=src[i];
                out[rec+1]='\0';
                printf("%s\n",out);
                combine(src,out,rec+1,i+1,end);
        }       
}       
int main(int argc, char *argv[])
{
        int len=strlen(argv[1]);
        char out[len];
        combine(argv[1],out,0,0,len);
        return 0;
}

 

/**
  *从字符串中取出n个的组合
  */
#include <stdio.h>
#include <string.h>
void combine(char *src,char *out,int start,int rec,int end, int n)
{

        int i;
        if(n>end)
                n=end;
        for(i=start;i<end;i++){
                out[rec]=src[i];
                if(n==1){
                        out[rec+1]='\0';
                        printf("%s\n",out);
                }else {
                        combine(src,out,i+1,rec+1,end,n-1);
                }
        }
}
int main(int argc, char *argv[])
{
        char out[strlen(argv[1])];
        combine(argv[1],out,0,0,strlen(argv[1]),atoi(argv[2]));
        return 0;
}
 

 

#include <stdio.h>
#include <string.h>
void arrange(char *src,int start,int end)
{
        int i;
        char tmp;
        if(start==end){
                printf("%s\n",src);
        }
        for(i=start;i<end;i++){
                tmp=src[start];src[start]=src[i];src[i]=tmp;
                arrange(src,start+1,end);
                tmp=src[start];src[start]=src[i];src[i]=tmp;
        }
}
int main(int argc, char *argv[])
{
        arrange(argv[1],0,strlen(argv[1]));
        return 0;
}
分享到:
评论

相关推荐

    递归算法实现随机串和全排列的生成

    在给定的“递归算法实现随机串和全排列的生成”主题中,我们将深入探讨递归在生成随机字符串和全排列问题中的应用。这里我们将主要关注递归的核心概念、如何生成随机字符串以及如何实现全排列,所有这些都是使用C#...

    列出字符串的全部排列组合

    总之,生成字符串的全部排列组合涉及到字符串操作、动态内存管理和递归算法等多个方面的知识。合理的设计和高效的算法实现是解决此类问题的关键。在实际开发中,我们应当注重代码的清晰度、效率和可维护性,以满足...

    java 用递归实现字符串反转

    ### Java使用递归实现字符串反转 在Java编程语言中,递归是一种常用的...需要注意的是,在实际开发中,对于非常大的字符串进行递归反转可能会导致栈溢出错误,因此在应用递归算法时也需要考虑其适用范围和可能的风险。

    递归实现字符串逆序

    ### 递归实现字符串逆序 #### 知识点概览 本文将详细介绍如何使用C++中的递归技术来实现字符串的逆序操作。逆序字符串是一个常见的编程问题,在多种场景下都有应用,例如文本处理、算法设计等。通过递归方法解决此...

    PHP多个字符串排列组合的算法,组二,组三

    在PHP编程语言中,处理字符串的排列组合是常见的任务,特别是在数据分析、彩票系统或其他需要生成所有可能结果的场景中。本篇文章将详细讲解如何利用PHP实现字符串的组合算法,特别是针对“组二”和“组三”的组合...

    字符串排列组合

    在编程领域,字符串排列组合是一个常见的算法问题,它涉及到如何生成一个字符串的所有可能的排列方式。这个主题主要与计算机科学的算法设计和技术有关,尤其是在数据结构和算法分析的课程中经常遇到。本节将深入探讨...

    基础算法-递归-杨鑫20191010.pptx

    基础算法-递归-杨鑫20191010.pptx,基础算法-递归-杨鑫20191010.pptx,基础算法-递归-杨鑫20191010.pptx

    .net 递归算法 .net 递归算法.net 递归算法

    在.NET编程环境中,递归算法是一种强大的工具,它允许函数或方法调用自身来解决复杂问题。递归的核心思想是将大问题分解为相同或相似的小问题,直到问题变得足够简单,可以直接得出答案。这种解决问题的方式在数据...

    算法-基础算法- 递归算法(包含源程序).rar

    递归算法的核心在于两个主要组成部分:基本情况(base case)和递归情况(recursive case)。基本情况是问题最简单的情况,可以直接求解,无需进一步的递归调用。递归情况则是将问题分解成规模更小的子问题,然后...

    使用递归算法来实现字符串逆序-C语言实现.zip

    本教程主要探讨如何使用C语言中的递归算法实现字符串逆序。首先,我们需要理解递归的基本概念,然后深入到C语言中如何操作字符串,最后将递归应用于这个特定问题。 **递归定义** 递归是函数或程序设计的一种技术,...

    VC对磁盘文件遍历搜索的递归算法和非递归算法

    在VC++(Visual C++)环境中,有多种方法可以实现这一目标,其中最常见的是递归算法和非递归算法。这两种方法各有优缺点,适用于不同的场景。 **递归算法**: 递归算法是一种基于函数自身调用解决问题的方法。在...

    多模式的字符串匹配算法--AC_BM算法的实现代码

    BM算法是一种基于坏字符规则和好后缀规则的单模式字符串匹配算法,它的主要优点在于能有效地跳过大部分不匹配的字符。在多模式匹配中,AC算法负责快速定位,而BM算法则用于减少不必要的比较次数。 AC_BM算法的实现...

    递归方法求阶乘字符串反转C#

    本文将基于“递归方法求阶乘与字符串反转”这一主题,深入探讨递归的基本概念、工作原理以及如何在C#语言中实现阶乘计算和字符串反转。 ### 一、递归的基本概念 递归(Recursion)是指在函数的定义或算法的描述中...

    acm递归算法总结竞赛

    9. **递归的应用**:在ACM竞赛中,递归算法广泛应用于图论(如深度优先搜索)、树结构处理(如二叉树遍历)和组合数学等领域。 10. **注意事项**:递归可能导致栈溢出,尤其是在没有正确设置终止条件或者问题规模过...

    递归算法专题ppt

    ### 递归算法专题知识点详解 #### 一、递归算法原理 递归算法是一种将问题分解成子问题的方法,其中子问题与原问题性质相同但规模较小。递归算法的关键在于识别出能够通过递归解决的问题,并找到递归的基本情况...

    数据结构和算法:字符串

    递归算法通常基于分治法的思想,通过逐个交换字符来生成新的排列,保证不遗漏任何排列的关键在于递归前保持序列的顺序。而非递归算法则涉及到从字典序最小的排列到字典序最大的排列的生成,通常需要理解排列的“下一...

    输入一个字符串,输出所有该字符串的组合情况

    标题 "输入一个字符串,输出所有该字符串的组合情况" 涉及的主要知识点是字符串处理和算法,特别是组合和排列的生成。在这个问题中,我们需要编写程序来生成一个给定字符串的所有可能的子序列或子字符串,这通常涉及...

    字符串逆序-使用C语言+递归实现字符串逆序.zip

    在逆序字符串的场景下,我们可以把字符串看作是第一个字符和剩余部分的组合,递归地处理剩余部分,直到剩余部分为空,然后将逆序后的剩余部分与第一个字符连接起来。 下面是一个使用递归实现C语言字符串逆序的基本...

Global site tag (gtag.js) - Google Analytics