2013-10-07 46 views
0

爲什麼這個遞歸方法不給我答案2.2833?遞歸追蹤輸出總和

double m(int i) 
    { 
     if (i == 1) 
     return 1; 
     else 
     return (1/i) + m(i -1); 
    } 

    int main() 
    { 
     double value=m(5); 
     cout << value << endl; 

     return 0; 
    } 

我得到的答案是1?

回答

1

因爲1/1是1和1/2 = 0(1/3 = 0 ....)

因此,我們需要做1.0/(double) i

然後1.0/2.0 = 0.5

#include <iostream> 

double m(int i) 
    { 
     if (i == 1) 
     return 1; 
     else 
     return (1.0/(double) i) + m(i -1); 
    } 

int main(int,char**) { 
    double value=m(5); 
    std::cout << value << "\n"; 
    return 0; 
} 
+0

我明確類型鑄造它,現在得到正確的輸出謝謝 – user2809437

+0

@ user2809437是的,'1.0'是雙倍,'1.0f'是一個浮點數,'1'是一個int,你應該看看隱式轉換爲基本類型。記得點贊並接受答案:) –