2013-04-18 64 views
2

我想寫建立起一個問題的所有可能的解決方案的遞歸函數。我想,我應該通過一個數組,然後,在每個遞歸步驟中,將其設置爲在該遞歸步驟可能所有的值,但然後我開始想,如果這是可能的,因爲C通過通過使指針的陣列。你通常如何處理這個問題?按遞歸函數的值傳遞數組可能嗎?

我想沿着這些路線的東西。該數組將根據選擇的路徑採用許多不同的值。我想我們真正想要的是按值傳遞數組。

recFunc(int* array, int recursiveStep) { 
    for (int i = 0; i < a; i++) { 
     if (stopCondition) { 
      doSomething;  
     } 
     else if (condition) { 
      array[recursiveStep] = i; 
      recFunc(array, recursiveStep+1);   
     } 
    } 
} 
+1

在你提供的,你不需要複製一個數組非常實施,遞歸的每級修改自己的元素。 – Ixanezis

回答

4

您可以按值將粘成一個結構數組傳遞:

struct foo { int a[10]; }; 

void recurse(struct foo f) 
{ 
    f.a[1] *= 2; 
    recurse(f); /* makes a copy */ 
} 
+0

感謝您的回答!比方說,遞歸調用的數量是很多,還有其他方式是首選還是這種方式? – sporetrans

+1

@sporetrans的首選方法是不向陣列反覆複製。 – 2013-04-18 22:27:02

+0

@ H2CO3你會如何解決遞歸它,而無需在陣列複製?這不是必須的,該函數必須是遞歸的。所以這樣做(在struct中包裝數組)在某種意義上不是「好」的編程實踐嗎?謝謝 – sporetrans

3

如果您需要按值傳遞,你總是可以換你數組的結構和傳遞。請記住,你現在的struct包含的數組仍然需要足夠大以處理所有情況。

+1

:-)對。由於第一個原因,你得到我的+1(並且因爲它是正確的)。 – 2013-04-18 22:25:47

+0

啊,慈善爲業障窮人。我謝謝你 :) –

3

包裝在一個結構。

typedef struct arr_wrp { 
    int arr[128]; // whatever 
} arr_wrp; 

void recFunc(arr_wrp arr, int step) { 
    // do stuff, then 
    arr.arr[step] = i; 
    recFunc(arr, step + 1); 
}