C++递归求解N个元素的所有子集

C++递归求解N个元素的所有子集

引言:

  我在复习C++遇到了设计递归函数的问题。这个例子,很好的显示了设计递归的方式,思想。

  这与斐波那数列不同,这个例子更有应用意义。

问题:

试编写一个递归函数,用来输入n个元素的所有子集。

  例如:三个元素{a,b,c}

  输出:

  {a,b,c}

  {ab}

  {ac}

  {bc}

  {a}

  {b}

  {c}

  {}

设计思路:

  首先,递归是使用的if else结构。

  然后,就是if中填条件,再在else写调用自身的函数。  
  详细思路,请看代码。

代码:

#include <string.h>
#include <iostream>
using namespace std; void build(char str[],int n)
{
if(n==)//控制输出
{
cout<<"{";
for(int i=;i<strlen(str);++i)
if(str[i]!=' ')
{
cout<<str[i];
}
cout<<"}"<<endl;
}
else
{
/*** 先递归 ***/
build(str,n-);
char newstr[] = {' '};//去掉就把该位置的元素置成空
/*** 还原之前的状态 ***/
strcpy(newstr,str);
/*** 越来越少的元素 ***/
newstr[n-]= ' ';
/*** 再次递归 ***/
build(newstr,n-); }
}

作者感言:

  其实,设计递归的关键是如何设计。想不到,就百度。看代码也是个快乐的过程,关键是仔细思考。

囫囵吞枣,对于程序员是要不得了。如果你无法做到,用手到后拈来。那么,你学习这个东西是失败的!

 

上一篇:HW4.38


下一篇:CSS面试题