刚写的一个双色球机选程序代码。请帮小弟我看看是否有错,多谢了

刚写的一个双色球机选程序代码。请大虾帮我看看是否有错,谢谢了!
这个程序代码自己感觉应该没错,但是在反复测试的时候会极小概率出现重复数(也不知是不是我眼花)......请大虾帮忙看看,谢谢了!因为我分很少,只能给这么点,还请见谅......

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define   n   6

int   num[n];
int   i;
int   compare(int);
void   compositor();

void   main()     //输出6个不重复的随机数(1-36)
{
int   x,y;
srand(time(0));
for(i=0;i <6;i++)
{
num[i]=rand()%36+1;
x=num[i]; //用数组名作函数参数时,不是把数组元素值传递给
num[i]=compare(x); //形参,而是把实参数组的起始地址传递给形参数组。
//printf( "%-5d ",num[i]);
}
printf( "福利彩票双色球\n ");
printf( "随机生成数:\n ");
compositor();
printf( "\b—   %d ",rand()%36+1);
printf( "\n ");
}

int   compare(int   x) //调用数组num[i]的值与数组前面的值进行比较,重复则重新生成数
{
int   a;
for(a=0;a <i;a++)
if(x==num[a])
{
num[i]=rand()%36+1;
x=num[i];
compare(x); //递归调用
}
return(x);
}

void   compositor() //排序
{
int   temp,b,c,d;
for(b=0;b <6;b++)
for(c=0;c <6;c++)
if(num[b] <num[c])
{
temp=num[b];
num[b]=num[c];
num[c]=temp;
}
for(d=0;d <6;d++)
printf( "%d   , ",num[d]);
}

本程序采用递归调用,反复把生成的数和前面的进行比较检查,如有重复重新生成再检查,直到和全部数检查结束无重复再输出!

------解决方案--------------------
我想问题可能出递归调用的返回过程中,在多次递归调用的返回过程中,for语句都是没有被完成的,被return语句打断,因此在这些没有被完成的部分中,可能会有重复出现。
------解决方案--------------------
应该是有问题的,ls说的有可能在没有完成的for语句有问题,确实如此,主要是你没有及时更新x造成的,不如将compare改为void compare( );
void compare()//调用数组num[i]的值与数组前面的值进行比较,重复则重新生成数
{
int a;
for(a=0;a <i;a++)
if(num[i]==num[a])//这样保持num[i]的比较,否则你用x,从底层递归回来时,x 没有变,你将x返回,当然可能有重复了
{
num[i]=rand()%36+1;
// x=num[i];
compare();//递归调用
}

}