我很难将函数从递归转换为使用 MPIR 库变量“mpz_t”而不是“unsigned __int64”的非递归函数。我也在尝试思考我应该如何编写循环。当我使它递归时,这很容易,但是当我尝试使它成为非递归时,就很难了!
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 = ? };
笔记:
我们应该尽量不要使用数组甚至向量,因为这些数字会非常非常大——这解释了为什么我要从 unsigned __int64 切换到 mpz_t。除非我们真的必须...
请帮忙,我真的很紧张。谢谢。