c++ 遞歸算法實現排列組合


  通過引用的方式來傳值,具體的實現的方法如下

void pc(int m,int n,int &position,int (&a)[100])
{
	//如果運算得到那個數
	if (position == m )
	{
		for (int i = 0; i < m; i++)
		{
			cout << a[i]<<' ';
		}
		cout << endl;
		position--;
	}
	else//如果家沒有到我們要找的m就繼續尋找
	{
		for (int i = 0; i < n; i++)
		{
			if (position == 0)
			{
				a[position] = i + 1;
				position++;
				pc(m, n, position,a);
			}
			else
			{
				if (i > (a[position - 1] - 1))
				{
					a[position] = i + 1;
					position++;
					pc(m, n, position,a);
				}
			}
		}
		position--;
	}
}

  如果我們想要實現列舉出n個元素抽取的所有的情況,我們通過一一的排列組合的方法太麻煩而且我們要知道遞歸的效率是非常的低的,我們通過一下方法實現全遍歷

	int n;//n是要排列的個數
	int all = 1 << n;
	for (int i = 0; i < all; i++)
	{
		//其實二進制的一步一步的進位就是對n個數的全遍歷
	}

  


免責聲明!

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



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