関数を再帰関数から、MPIRのライブラリ変数「unsigned__int64」の代わりに「mpz_t」を使用する非再帰関数に変換するのに非常に苦労しています。また、ループをどのように書くべきかについても考えようとしています。再帰的にしたときは簡単でしたが、非再帰的にしようとすると大変でした!
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に切り替える理由を説明しています。私たちが本当にしなければならないのでなければ...
助けてください、私は本当にストレスを感じています。ありがとう。