PDA

View Full Version : نوشتن زیر مجموعه با تابع بازگشتی



gilasse ghermez
سه شنبه 19 آبان 1388, 00:50 صبح
دوستان کسی در مورد نوشتن همه ی زیر مجموعه های یه مجموعه با استفاده از تابع بازگشتی در زبان C میتونه توضیحی واسم بده؟؟ممنون

tdkhakpur
سه شنبه 19 آبان 1388, 10:54 صبح
#include <iostream.h>
#include <conio.h>
#include <stdio.h>
#define MaxNums 6
#define MaxCalcNums 3
typedef struct MySt_
{
int Nums [MaxNums];
int ResultNums [MaxNums];
int cResult ;
bool Flag [MaxNums];
} Nums ;
void CalcNums ( int index, Nums nums )
{
if( index == MaxNums || nums.Flag[index] ) return;
//nums.Flag[index] = true;
nums.ResultNums [ nums.cResult ] = nums.Nums[index];
nums.cResult ++;
if( nums.cResult == MaxCalcNums )
{
cout<<"\n------------\n";
for( int i=0; i<nums.cResult ; i++ )
cout<<nums.ResultNums [i]<<",";
cout<<" press key..";
if( getch()==27 ) return;
return;
}
for( int i=0; i<MaxNums ; i++ )
if( i!=index )
CalcNums ( i, nums );
}
int main()
{
Nums nums={0};
clrscr();
nums.Nums [0] = 2; nums.Nums [1] = 5; nums.Nums [2] = 3;
nums.Nums [3] = 4; nums.Nums [4] = 6; nums.Nums [5] = 1;
for( int i=0; i<MaxNums ; i++ )
CalcNums ( i, nums );
return 0;
}

khafan_bat
سه شنبه 19 آبان 1388, 16:58 عصر
بی زحمت یه توضیح در باره ی الگوریتم این کد میدی ؟

tdkhakpur
سه شنبه 19 آبان 1388, 17:49 عصر
من اين كدها رو خيلي وقته نوشتم و آماده بود كه براي شما ارسال كردم.
همانطور كه مشا هم ميدانيد توضيح نحوه اجراي يك الگوريتم اون هم بازگشتي بسيار سخته ولي اين كار با بررسي و خطا انجام ميشه همه اعداد را يك به يك با ساير اعداد در يك سري قرار ميدهد و flag براي بررسي اينه كه عدد مورد پردازش قرار گرفته است تا عدد بعدي مد نظر قرار گيرد.

mortezamsp
سه شنبه 19 آبان 1388, 21:14 عصر
با سلام.

این فقط یک کم تو پرینتش مشکل داره:



void func(int*aray,int n)
{
if(n==0)
cout<<aray[n];

else
{
cout<<aray[n]<<" , "<<aray[n]<<" * { ";
func(n-1);
cout<<" } ";

}


int main()
{
int aray[3]={1,2,3};

func(aray,3-1);

return 0 ;
}