遞歸法求大于2的正整數(shù)所有素因子之和

問題描述:編寫遞歸函數(shù),求一個(gè)大于2的正整數(shù)n的素因子之和
輸入:一個(gè)大于2的正整數(shù)n
輸出:這個(gè)數(shù)的所有素因子之和

實(shí)例
輸入:4,16,30
輸出:2,2,10

解題思路:
(1)題目限制用遞歸函數(shù)求解鹅搪,便要了解遞歸函數(shù)的要訣:遞歸終止條件和遞歸過程痒谴;
(2)遞歸終止條件顧名思義妻怎,滿足該條件遞歸函數(shù)返回到調(diào)用其的主調(diào)函數(shù)(有“遞”就有“歸”);
搞清楚這兩點(diǎn)后希柿,再思考本題要遞什么哭尝,歸什么斥杜。顯然涕俗,是要遞輸入的正整數(shù)(可能不完全,我的解答過程也表明只遞該正整數(shù)也不行)椎眯,歸這個(gè)正整數(shù)的素因子之和挠将。搞清楚這兩件事之后,開始尋找遞歸終止條件盅视。
由于我在求素因子用的是蠻力求法(從2往后試)捐名,所以判斷遞歸終止條件是( n == i )。但此時(shí)有兩種情況會(huì)發(fā)生闹击,一是當(dāng)前求得的素因子和之前不等镶蹋,另一種情況是相等,因而要分開寫返回語(yǔ)句赏半,前者返回當(dāng)前i的值贺归;后者返回0。開始解答本問題時(shí)断箫,我沒有意識(shí)到這一點(diǎn)拂酣,導(dǎo)致無法得到正確的解法。
解決了遞歸終止條件問題后仲义,就要寫遞歸過程了婶熬。也分為兩種情況剑勾,我是在設(shè)置了一個(gè)求和函數(shù)又撤銷的反復(fù)過程中才理解清楚這個(gè)遞歸過程(也許現(xiàn)在可能還有紕漏吧)。一種是當(dāng)前i值是其素因子和非素因子赵颅。當(dāng)然獲得一個(gè)素因子之后還要判斷是否等于之前的素因子虽另,等于則要去掉,于是我設(shè)置了一個(gè)全局變量保存了上一步求得的素因子饺谬。通過前后兩個(gè)素因子的比較才解決了這個(gè)問題捂刺。

完整代碼如下:

/*問題:編寫遞歸函數(shù),求一個(gè)大于2的正整數(shù)的質(zhì)因數(shù)之和
        Written by : Jimmy Tung
        Date : 2020.03.10-03.13
*/
//程序功能:
//  輸入:大于2的正整數(shù)n
//  輸出:     n < 3 輸出錯(cuò)誤
//            n 合適 輸出正整數(shù)n的質(zhì)因數(shù)之和
//            n 過大 (先不考慮此類情況,如輸入一個(gè)100位的整數(shù))

#include <stdio.h>
#include <stdlib.h>

int Recur_Prim( int, int); //遞歸求解質(zhì)因子

int main(void)
{
    int num; //存放輸入的正整數(shù)
    printf("請(qǐng)輸入一個(gè)大于2的正整數(shù):");
    while( scanf("%d", &num)!= 1 || num < 3)
    {
        while(getchar() != '\n') //確保讀取到符合條件的正整數(shù)
            ;
        printf("輸入錯(cuò)誤,請(qǐng)重新輸入:");
    }
    printf("%d的質(zhì)因子之和為:%d", num, Recur_Prim( num, 2));

    system("PAUSE");
    return 0;
}

//遞歸求解質(zhì)因子之和
int prim_pre = 0; //定義一個(gè)全局變量保存此前求得的質(zhì)因子,目的是為了篩掉重復(fù)的素因子
int Recur_Prim(int n, int i)
{
    if( i == n && i == prim_pre) return 0;  //遞歸終止條件1
    else if( i == n && i != prim_pre) return i;  //遞歸終止條件2
//遞歸過程
    if( i != n && n%i == 0 )
    {
        n = n/i;
        if( prim_pre == i )
        {
            return Recur_Prim( n, i);
        }
        else
        {
            prim_pre = i;
            return i + Recur_Prim( n, i);
        }
    }
    else
    {
        return Recur_Prim( n, ++i);
    }
}

我自忖資質(zhì)淺薄,關(guān)于這個(gè)問題思考了大概三天時(shí)間才想清楚募寨。與我而言族展,難點(diǎn)主要在于理解遞歸終止條件上面。說來有趣的很拔鹰,這個(gè)問題我是在去同學(xué)家的路上想通的仪缸,當(dāng)時(shí)只想著去朋友那里玩兩天,但題目未得破解的郁悶仍在心頭格郁,在車上無聊腹殿,便冥想起來独悴,左思右想居然想通了例书!天意啊刻炒!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末决采,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子坟奥,更是在濱河造成了極大的恐慌树瞭,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,826評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件爱谁,死亡現(xiàn)場(chǎng)離奇詭異晒喷,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)访敌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門凉敲,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人寺旺,你說我怎么就攤上這事爷抓。” “怎么了阻塑?”我有些...
    開封第一講書人閱讀 164,234評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵蓝撇,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我陈莽,道長(zhǎng)渤昌,這世上最難降的妖魔是什么虽抄? 我笑而不...
    開封第一講書人閱讀 58,562評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮独柑,結(jié)果婚禮上极颓,老公的妹妹穿的比我還像新娘。我一直安慰自己群嗤,他們只是感情好菠隆,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,611評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著狂秘,像睡著了一般骇径。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上者春,一...
    開封第一講書人閱讀 51,482評(píng)論 1 302
  • 那天破衔,我揣著相機(jī)與錄音,去河邊找鬼钱烟。 笑死晰筛,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的拴袭。 我是一名探鬼主播读第,決...
    沈念sama閱讀 40,271評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼拥刻!你這毒婦竟也來了怜瞒?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,166評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤般哼,失蹤者是張志新(化名)和其女友劉穎吴汪,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蒸眠,經(jīng)...
    沈念sama閱讀 45,608評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡漾橙,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,814評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了楞卡。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片霜运。...
    茶點(diǎn)故事閱讀 39,926評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖臀晃,靈堂內(nèi)的尸體忽然破棺而出觉渴,到底是詐尸還是另有隱情,我是刑警寧澤徽惋,帶...
    沈念sama閱讀 35,644評(píng)論 5 346
  • 正文 年R本政府宣布案淋,位于F島的核電站,受9級(jí)特大地震影響险绘,放射性物質(zhì)發(fā)生泄漏踢京。R本人自食惡果不足惜誉碴,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,249評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望瓣距。 院中可真熱鬧黔帕,春花似錦、人聲如沸蹈丸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)逻杖。三九已至奋岁,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間荸百,已是汗流浹背闻伶。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留够话,地道東北人蓝翰。 一個(gè)月前我還...
    沈念sama閱讀 48,063評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像女嘲,于是被迫代替她去往敵國(guó)和親畜份。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,871評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容