遡及アルゴリズムにおける宝くじ生成アルゴリズムの分析


コードの能力は本当に足りなくて、自分で书くことができなくて、コードを见てすべて长い间见て、やっと见て分かって、书くことを决めて、このように理解を深めるかもしれません:テーマ:4位の宝くじを生成して、1位は1から7の任意の数字で、1位の间で缲り返すことができないことを要求します.
コード:
#include <stdio.h>
#define MAXN 4 //           
#define NUM 7 //          
int num[NUM];
int lottery[MAXN];
int c=0;
void combine(int n, int m)//      , i=n=7  ,      >=  ,   i>=m。(             )
{
     int i,j;
     for(i=n;i>=m;i--)
     {
         lottery[m-1]=num[i-1]; //  7         4 (       ) 
         if (m>1)	//            ,        ,       
             combine(i-1,m-1);
             //           3 ,  6   ;    ,          ,  4    
         else//m = 1;          ,    3        
         {
             for(j=MAXN-1;j>=0;j--)
                 printf("%3d",lottery[j]);
             c++;
             printf("
"); } } } int main() { int i,j; for(i=0;i<NUM;i++) // num[i]=i+1; for(i=0;i<MAXN;i++) lottery[i]=0; combine(NUM,MAXN); printf("%d",c); getch(); return 0; }

原書ではこれが遡及アルゴリズムの一例だと言っていますが、個人的にはこれが階層的に自分を呼び出しているからかもしれないと感じています.一人の宝くじが使用された後、前の人に戻って、それを変えて、後の人を変え続けています.