算法:递归总结(2)例子

来源:互联网 发布:淘宝装修设计 编辑:程序博客网 时间:2024/06/08 05:11

 关于递归输出数组的全排列:

按照分治的思想,将一个大的问题转化为一个小的问题,那么对于数组来说就是一次次的将他的维数减少,也就是可以先确定一个数,接着去确定n-1个数,然后依此思想,不断地分化出去,确定最后一个以后可以作为一个输出条件。

 void Perm(int a[],int local,int len)
{
if(local==len)
{
for(int i = 0;i <= len ;i++)
{
cout<<a[i]<<" ";
}
cout<<endl;
}
else
{
for(int j = local;j<=len;j++)
{
Swap(a[local],a[j]);//交换这两个位置的数
Perm(a,local+1,len);
Swap(a[local],a[j]);
}
}
}



关于递归求子集:

方法都是递归,但是思路的话要靠自己去想,我这个思路也是老师提供的,我把他实现了而已。


#include <iostream>


using namespace std;


void GetChild(int a[],int k,int len)
{
int i = k;
if(i==len)
{
for(int j = 0;j<=len;j++)
{
if(a[j]==0)
{
;
}
else
{
cout<<a[j]<<" ";
}
}
cout<<endl;


int t = a[len];
a[len] = 0;
for(int j = 0;j<=len;j++)
{
if(a[j]==0)
{
;
}
else
{
cout<<a[j]<<" ";
}
}
cout<<endl;
a[len] = t;
}


else
{
GetChild(a,i+1,len);//1 2 3       1 2
int t = a[i];
a[i] = 0;
GetChild(a,i+1,len);
a[i] = t;
}
}


int main(int argc,char *argv[])
{
int a[] = {1,2,3};
int n = sizeof(a)/sizeof(a[0]);
GetChild(a,0,n-1);//0 2
return 0;
}


想着放假一天一篇呢,结果宿舍断网两天就出去浪了,这样不好不好






0 0