我有一個序列。序列有無遞歸
a1 = 1 - cos(x);
ai = a1 + (-1)^(i-1) * x^(2*i-2)/(2*i-2)!
我需要使用和不使用遞歸寫這個。但它有不同的結果。
這裏是我的代碼:http://codepaste.net/q213q6
我有一個序列。序列有無遞歸
a1 = 1 - cos(x);
ai = a1 + (-1)^(i-1) * x^(2*i-2)/(2*i-2)!
我需要使用和不使用遞歸寫這個。但它有不同的結果。
這裏是我的代碼:http://codepaste.net/q213q6
我打算假設這是家庭作業,如果我錯了我會回來編輯這篇文章或重新發布。
首先,您應該嘗試以尾遞歸方式編寫階乘函數。雖然它在C中可能沒有太大的區別,但這是一個好習慣。
int helper(int x, int acc) {
if(x == 0) {
return acc;
}
else {
return helper(x - 1, acc * x);
}
}
int factorial(x) {
helper(x, 1);
}
接下來,您一般不希望把一個循環的遞歸函數,這有點違背了點內。將遞歸調用想象爲一次迭代,並返回或回想。
由於您正在執行浮點運算。不同的實施方式可能產生不同的結果。 在你的情況下損失發生
currC = pow(x, 2*i-2);
不等於
47: currC = currC * x * x;
欲瞭解更多信息, http://en.wikipedia.org/wiki/Floating_point#Multiplication
看起來像功課我能想到的一個地方。請把這個標籤如果爲真 – Andrey
我想你的序列是收斂到零。如果是這樣,它應該被定義爲a_i = a_(i-1)+ ... –