【分享】非递归方式遍历所有组合
<p><font face="Verdana">听到这个题目,我想有些人会问为什么要用非递归的方式。递归调用写法简单,既然能够实现功能,为什么还要用非递归方式呢?因为递归调用,就是函数的调用,除了函数调用开销的原因外,还有一个不得不考虑的问题就是堆栈溢出。所以在一些调用次数很多的场合下就不能采用递归了。<br/>int combine(int arr[], int n)<br/>{<br/> int index;<br/> <br/> int i, j;<br/> for (int r=1; r<=n; r++)<br/> {<br/> for (int a=0; a<r; a++)<br/> index = a; </font></p><p><font face="Verdana"> while ( 1 )<br/> {<br/> i = r-1;</font></p>
<p><font face="Verdana"> for (int a=0; a<r; a++)<br/> cout<<index<<" ";<br/> cout<<endl;</font></p>
<p><font face="Verdana"> while ( index == n-r+i )<br/> {<br/> i = i - 1;<br/> }</font></p>
<p><font face="Verdana"> if ( i < 0 )<br/> break;</font></p>
<p><font face="Verdana"> index ++;</font></p>
<p><font face="Verdana"> for (j=i+1; j<r; j++)<br/> {<br/> index = index + j - i;<br/> } <br/> }<br/> }<br/> return 0;<br/>}</font></p>
页:
[1]