recursionのみを使用して、次のネストされたルート式を計算するように求められました。
私は機能する以下のコードを書きましたが、それらは1つの関数と1つの入力n
のみを使用することを許可し、2では使用できませんでした。私が使ったように。誰かがこのコードを式を計算する1つの関数に変換するのを手伝ってくれませんか? <math.h>
の関数以外のライブラリは使用できません。
n = 10の出力:1.757932
double rec_sqrt_series(int n, int m) {
if (n <= 0)
return 0;
if (m > n)
return 0;
return sqrt(m + rec_sqrt_series(n, m + 1));
}
double helper(int n) {
return rec_sqrt_series(n, 1);
}
ここに別のアプローチがあります。
int
が32ビットであることを前提としています。アイデアは、64ビットint
の上位32ビットを使用して
1)呼び出しが再帰呼び出し(または「外部」からの呼び出し)であったかどうかを確認します。
2)再帰中に上位32ビットにターゲット値を保存する
// Calling convention:
// when calling this function 'n' must be a positive 32 bit integer value
// If 'n' is zero or less than zero the function have undefined behavior
double rec_sqrt_series(uint64_t n)
{
if ((n >> 32) == 0)
{
// Not called by a recursive call
// so start the recursion
return rec_sqrt_series((n << 32) + 1);
}
// Called by a recursive call
uint64_t rn = n & 0xffffffffU;
if (rn == (n >> 32)) return sqrt(rn); // Done - target reached
return sqrt (rn + rec_sqrt_series(n+1)); // Do the recursive call
}