以下程序 不对,仅供思路思考。。用二叉树比较好
/*
include<iostream>
using namespace std;
int twin(int n);
int main()
{
int b[20];
int n;
int i;//起始值
cin>>n;
cout<<twin(n)<<endl;
}
int twin( int n ) //双重递归
{
int a[1];
a[1] = 3;
if(n > 0 && n == 1)
return a[1];
else
{
return a[1]*twin(n-1);
}
*/
include<iostream>
using namespace std;
int twin02a(int n);
int twin02b(int n);
int twin03(int n);
int mendel(int n,int i);
int main()
{
int n ,i=0 ;
int j;
int c;
cin >> n;
c = twin03(n); //形状比个数
cout<<c<<endl;
for(j = 0;j < c ;j++)
{
cout<<mendel( n, i )<<endl;;
--n;
}//cout << twin02a(n) << endl;
//cout<< twin02b <<endl;
}
int twin02a( int n ) //第二层递归
{
//int b[n*n];
//int i=0;
/*if(n >= 0 && n == 2)
return 3;
*/
if(n==1)
return 1;
else
{
// for(int i=0; n-i>0 ; i++)
return 3 * twin02a(n - 1) ;//* twin(i);
//cout<<"1"<<endl;
}
}
int twin02b( int i )
{
//int b[n*n];
//int i=0;
/*if(i >= 0 && i == 1)
return 1;
*/
if(i==0)
return 1;
else
{
// for(int i=0; n-i>0 ; i++)
return 1 * twin02b(i - 1) ;//* twin(i);
//cout<<"1"<<endl;
}
}
int mendel(int n,int i)
{
//if(n==1)
//cout<< twin02b(1) << ":" << twin02a(1) <<endl;
//else
{
return twin02a(n - i) * twin02b(i);
i++;
}
}
// 个数为2^n
int twin03(int n)
{
if(n==1)
return 2;
else
{
return 2 *twin03(n-1);
}
}
网友评论