zoukankan      html  css  js  c++  java
  • C语言递归

    /*
    程序作用:从集合{1,2,3,4,5}中选择k个元素的所有组合方式,k由用户输入
    程序设计者:calm
    程序设计时间:2007-12-14
    程序思想:假设集合有n个元素,选出k个元素,可以递归思想来考虑,即将集合分为第1个和后面(n-1)两个部分
    如果包含第1个,则从后面的(n-1)个元素中选出(k-1)个来组合;如果集合不包含第1个元素,则从后面的(n-1)
    个元素中选出k个元素组合。
    */
    #include<stdio.h>
    int m[5],j,len;  //定义全局整形变量j,全局整形数组m[5]用来存放找出的元素组合,len表示要选出子集的个数
    /*
    定义Comb(int p[],int n,int i,int k)
    p[]为集合{1,2,3,4,5},n为集合的个数,i为从第i个元素开始寻找,k为所找元素个数
    */
    void Comb(int p[],int n,int i,int k) 
    {
     if(k==0)
     {
      for(j=0;j<5;j++) //循环输出选出组合
      {
       if(m[j]!=0)
       printf("%d ",m[j]);
      }
      printf("\n");
     }
     else
     {
      if(k<=n-i)
      {
       m[j]=p[i];
       j++;
       Comb(p,n,i+1,k-1); //递归开始
       j=len-k;
       Comb(p,n,i+1,k);
      }
     }
    }
    void main()
    {
     int i,k,a[5]={1,2,3,4,5};
     printf("Collects:");
     for(i=0;i<5;i++)
     {
      printf("%d ",a[i]);
     }
     //输出集合中包含k个元素的子集
     
     printf("\nHow many element do you want to choose:");
     scanf("%d",&k);
     len=k;
     printf("As follows:\n");
     Comb(a,5,0,k);  //调用Comb函数
     
     //输出集合的所有子集
     /*
     getchar();
     i=1;
     while(i<=5)
     {
      printf("include %d:\n",i);
      len=i;
      Comb(a,5,0,i);  //调用Comb函数
      putchar('\n');
      i++;
     }
     */

     printf("\nThe end!");
     getche();
    }

  • 相关阅读:
    小乖乖的Linux历险记
    走近虚拟机与Linux
    Navicat for MySQL数据库管理工具安装和破解
    Spring + Struts + Hibernate 简单封装通用接口
    Java 学习路线图
    Java Mail 发送带有附件的邮件
    Java POI 读取Excel数据转换为XML格式
    Spring + Struts + Hibernate + Bootstrap-table 实现分页和增删改查
    Java 基础知识
    SSH三大框架知识点
  • 原文地址:https://www.cnblogs.com/calm/p/1151843.html
Copyright © 2011-2022 走看看