[英]Heap's Algorithm in C++ segmentation fault
我一直致力於實現堆算法的遞歸版本。 這是偽代碼的鏈接: http : //en.wikipedia.org/wiki/Heap%27s_algorithm
在我到達遞歸部分之前,一切都很順利。 我知道我還沒有加入交換元素,但我還沒有那么遠。 運行失敗而沒有顯示錯誤,直到我使用 gcc 調試器告訴我存在分段錯誤。 這是我的代碼:
#include <string>
#include <iostream>
using namespace std;
string* permute(int n, string array[2]){
if (n==1){
return array;
}
else{
for(int c=1; c<=n;c++){
permute(n--,array);
}
}
}
int main() {
string array[2]={"a","b"};
permute(2,array);
return 0;
}
撇開整個實現似乎錯誤的事實不談,您遇到的運行時異常的直接原因是您對permute(2,array)
遞歸調用,這最終會導致堆棧溢出。 發生這種情況是因為您使用n--
而不是--n
(或更准確地說, n-1
)來調用它。
嘗試permute( --n, array )
你傳遞的是 2 的副本而不是減量
您必須使用前綴減法:
改變:
permute(n--,array);
到:
permute(--n,array);
通過這種方式,您首先減少 'n',然后調用 permute。
在第一種情況下,您永遠不會減去並且您有無限遞歸。
您不應該在遞歸調用中對n
進行后遞減,而是先遞減:
permute(--n,array);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.