iT邦幫忙

0

請問程式遞迴問題

  • 分享至 

  • xImage

我請教我同學用遞迴演算法計算1 + 1/2 + 1/3 + 1/4 + 1/5 + ... + 1/n
他寫的程式如下:

#include<bits/stdc++.h>

using namespace std;

int main()

{

    int a;

    double s=0;

    cin>>a;

    for(int i=1;i<=a;i++)

        s+=(double)(1*1.0/i);

    cout<<fixed<<setprecision(6)<<s<<endl;

    return 0;

}

請問除了這種解法,還有其他更簡易的解法嗎?

看更多先前的討論...收起先前的討論...
之前不是說同事問大數相加問題
https://ithelp.ithome.com.tw/questions/10198155
現在又跑同學出來了.
等等同鄉、同好、同人(啥?)....統統都出來了。
小a模式又出現了。唉.....
通靈亡 iT邦高手 1 級 ‧ 2020-05-05 20:21:20 檢舉
下一次換爺爺、奶奶問你該怎麼問問題
player iT邦大師 1 級 ‧ 2020-05-05 21:28:53 檢舉
【遞迴】是函數自己呼叫自己,但是重點在函數的離開條件要寫清楚,不然程式會在裏頭跑不出來導致堆疊溢位。
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

1
listennn08
iT邦高手 5 級 ‧ 2020-05-05 16:50:03

你同學那叫迭代不是遞迴
一邊上班還要一邊上課真是辛苦

#include<bits/stdc++.h>

using namespace std;
double count(double total, int num, int a)
{
    return (num <= a) ? count(total + (1*1.0/num++), num, a) : total;
}

int main()
{
    int a;
    int i=1;
    double s=0;
    cin>>a;

    cout<<fixed<<setprecision(6)<<count(s, i, a)<<endl;

    return 0;
}
看更多先前的回應...收起先前的回應...
wen1112 iT邦新手 5 級 ‧ 2020-05-06 13:54:34 檢舉

小女子感謝大神的幫忙,我的確在半工半讀.

我不是大神,我只是剛好有辦法解決你的疑惑而已
半工半讀還自學程式,很有上進心啊/images/emoticon/emoticon12.gif

wen1112 iT邦新手 5 級 ‧ 2020-05-06 15:51:49 檢舉

cout<<fixed<<setprecision(6)<<count(s, i, a)<<endl;
請教一下,這行的意思我真的看不懂?

cout<<fixed<<setprecision(6) // 控制輸出至小數點後 6 位
// 有加 fixed 才是小數點後,如果只有 setprecision(6)是總共輸出 6 位數
<<count(s, i, a) // 呼叫 count 函數 傳入 s, i, a 變數
<<endl; // 換行
wen1112 iT邦新手 5 級 ‧ 2020-05-06 16:11:26 檢舉

太感激了,真的非常清楚/images/emoticon/emoticon41.gif

有幫到你就好/images/emoticon/emoticon42.gif

我要發表回答

立即登入回答