我真的很難從遞歸函數轉換爲使用MPIR庫變量「mpz_t」而非「unsigned __int64」的非遞歸函數 。我也在想如何編寫循環。當我遞歸時,它很容易,但是當我試圖使它不遞歸時,它很難!問題的C++重寫一個遞歸函數爲非遞歸 - 涉及MPIR&非常困難
unsigned __int64 exampleFunc(unsigned __int64 a,
unsigned __int64 b,
unsigned __int64 c)
{
if(a <= 2)
return a + 1;
if(b <= 4)
return b;
if(c == 3)
return c - 1;
if(b == 5)
c += 2;
// How will I put these into a loop?
return exampleFunc(a - 1, b - 2, c) + exampleFunc(0, b + 1, c - 1);
};
部分原因是,我們不能寫一個返回mpz_t值的函數。 我們只能寫一個值(如指針)。所以,像這樣 將不起作用:
mpz_t exampleFunc(...);
這意味着,像這樣可以工作:
void exampleFunc(mpz_t out, ...);
甚至一個全局變量(不強烈推薦):
mpz_t g_out;
mpz_init(g_out);
void exampleFunc(...) { g_out = ? };
備註:
我們應該儘量不使用數組或甚至矢量,因爲數字會非常大 - 這就解釋了爲什麼我從無符號__int64切換到mpz_t。除非我們真的必須...
請幫助,我真的很強調。謝謝。