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==0)//控制輸出
    {
        cout<<"{";
        for(int i=0;i<strlen(str);++i)
            if(str[i]!=' ')
                {
                    cout<<str[i];
                }
        cout<<"}"<<endl;
    }
    else
    {
        /*** 先遞歸 ***/
        build(str,n-1);
      char newstr[5] = {' '};//去掉就把該位置的元素置成空
            /*** 還原之前的狀態 ***/
            strcpy(newstr,str);
            /*** 越來越少的元素 ***/
            newstr[n-1]= ' ';
            /*** 再次遞歸 ***/
            build(newstr,n-1);
      
    }
}

 作者感言:

  其實,設計遞歸的關鍵是如何設計。想不到,就百度。看代碼也是個快樂的過程,關鍵是仔細思考。

囫圇吞棗,對於程序員是要不得了。如果你無法做到,用手到后拈來。那么,你學習這個東西是失敗的!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM