999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于C語言的遞歸算法研究

2018-06-14 05:47:06劉卓亞
數字技術與應用 2018年3期

劉卓亞

(云南機電職業技術學院工業信息技術系,云南昆明 650203)

遞歸是C語言中經常使用的將復雜問題簡單解決的方法,遞歸作為一種算法在程序設計語言中廣泛應用。C語言中當一個函數直接或間接調用該函數本身時,就被稱為函數的遞歸調用。遞歸的基本思想是將原問題轉化為規模縮小了的同類問題的子問題,然后遞歸調用該函數來表示問題的解[1]。

1 遞歸調用的條件

在解決實際問題時,能否用遞歸的方法來解決,取決于問題自身的特點。一個問題要用遞歸的方法來解決,需滿足以下條件:

(1)原問題可轉化為一個新問題,而這個新問題與原問題有相同的解決方法。

(2)新問題可繼續這種轉化,在轉化過程中,問題有規律地遞增或遞減。

(3)在有限次轉化后,問題得到解決,即具備遞歸結束的條件。

2 利用遞歸求解最大公約數

C語言中用遞歸方式計算兩個正整數a1,b1的最大公約數,實質它依賴于下面的定理:

從該定理我們可以看出它是符合上述條件的,首先將求解最大公約數gcd(a1,b1)轉化成了一個新問題gcd(b1,a1 mod b1),而這個新問題與原問題有相同的解決方法;其次第二個參數經過多次取余后一直在變小;經過有限次的調用后b1=0,出現遞歸邊界,結束遞歸調用。

C語言的源代碼如下:

int gcd (int a1,int b1)

{ if(a1%b1==0)

return b1;

else

return gcd(b1,a1%b1);

}

#include "stdio.h"

main()

{

int c,d,t;

printf("請輸入兩個整數:");

scanf("%d%d",&c,&d);

t1=gcd(c,d);

printf("最大公約數是 %d ",t);/*最大公約數*/

}

如果輸入的兩個數是8和6,需要計算gcd(8,6)由于6不是邊界值,需要計算gcd(6,2),由于2也不是邊界值,需要計算gcd(2,0),此時出現邊界值,gcd(2,0)的結果是2,向上返回gcd(6,2)的結果也是2,再向上返回gcd(8,6)的結果也是2,最后求得8和6的最大公約數是2。

由公式: c%d<=c/2 可知:每次遞歸調用,問題的規模減小一半,類似于二分查找,這顯然是一個非常好的算法。

由于程序前4行,花費的時間為常量時間,在第5行進行遞歸調用,問題規模減少一半。可得出,T(N) = T(N/2)+O(1) 推出:時間復雜度為O(logN)。

3 利用循環語句求解最大公約數

窮舉法,也叫枚舉法。窮舉法求兩個正整數的最大公約數就是利用循環語句進行求解,其解題步驟:從兩個數中較小數開始由大到小列舉,直到找到公約數立即中斷列舉,得到的公約數便是最大公約數。

C語言的源代碼如下:

int divisor (int a1,int b1) /*自定義函數求兩數的最大公約數*/

{

int temp; /*定義整型變量*/

temp=(a1>b1)b1:a1; /*采種條件運算表達式求出兩個數中的最小值*/

while(temp>0)

{

if (a1%temp==0&&b1%temp==0) /*只要找到一個數能同時被a,b所整除,則中止循環*/

break;

temp--;/*如不滿足if條件則變量自減,直到能被a,b所整除*/

}

return (temp); /*返回滿足條件的數到主調函數處*/

}

#include "stdio.h"

main()

{

int c,d,t;

printf("請輸入兩個整數:");

scanf("%d%d",&c,&d);

t1=divisor(c,d);

printf("最大公約數是 %d ",t);

}

如果輸入的兩個數仍然是8和6,則temp=6,由于6不能同時被8和6整除,所以temp=5,5不能同時被8和6整除,temp=4,4不能同時被8和6整除,temp=3,3不能同時被8和6整除,temp=2,2能同時被8和6整除,因此2就是8和6的最大公約數。該程序只有一層循環,時間復雜度為O(N)。

4 結語

通過上述對比,我們發現一般情況下遞歸和循環語句是可以相互替換的,從語法來看遞歸比循環語句更簡潔,但是從算法上看,循環語句更容易理解,而遞歸需要找到遞歸形式和遞歸邊界,這對于初學者來說是比較困難的。從執行的效率來看,遞歸調用比循環語句更高效。

[1]衡軍山,邵軍.C語言程序設計基礎[M].航空工業出版社,2014.1.[2]彭順生.C語言項目式系統開發教程[M].人民郵電出版社,2016.8.

主站蜘蛛池模板: 国产真实乱了在线播放| 亚洲色图欧美一区| 2020精品极品国产色在线观看| 亚洲国产成人麻豆精品| 就去色综合| 免费观看国产小粉嫩喷水| 国产一级妓女av网站| 日韩精品亚洲精品第一页| 欧美性天天| 亚洲天堂久久久| 午夜性爽视频男人的天堂| 999精品色在线观看| 久久久久88色偷偷| 高潮毛片无遮挡高清视频播放| 热热久久狠狠偷偷色男同| 不卡网亚洲无码| 91精品免费高清在线| 美女国内精品自产拍在线播放| 人妻21p大胆| 久久人搡人人玩人妻精品| 国产一区亚洲一区| 五月婷婷综合网| 伊人色在线视频| 99精品免费欧美成人小视频| 色香蕉网站| 色男人的天堂久久综合| 欧美一区福利| 午夜视频日本| hezyo加勒比一区二区三区| 中文字幕在线日韩91| 亚洲V日韩V无码一区二区| 色综合a怡红院怡红院首页| 亚洲女人在线| 91久久精品国产| 青青热久免费精品视频6| 亚洲性影院| 国产二级毛片| 国产va在线观看免费| 亚洲中文字幕久久精品无码一区| 国产人成乱码视频免费观看| 国产爽歪歪免费视频在线观看| 精品91视频| 国产精品网址在线观看你懂的| 国产玖玖视频| 欧美激情伊人| 亚洲精品无码人妻无码| 真人高潮娇喘嗯啊在线观看| 亚洲AV无码一二区三区在线播放| 欧美在线观看不卡| 日韩不卡高清视频| 国产99视频在线| 亚洲高清资源| 伊人AV天堂| 色婷婷久久| 国产农村妇女精品一二区| 日韩天堂网| 国产三区二区| 伊人AV天堂| 国产精品欧美日本韩免费一区二区三区不卡 | 中文字幕2区| 国产成人亚洲精品色欲AV| 高清大学生毛片一级| 久久精品国产精品青草app| www.国产福利| 福利小视频在线播放| 国产成人福利在线视老湿机| 精品国产香蕉在线播出| 91人人妻人人做人人爽男同| 美女无遮挡拍拍拍免费视频| 国产AV毛片| av在线5g无码天天| 亚洲成人一区二区三区| www亚洲天堂| 丁香亚洲综合五月天婷婷| 国产亚洲精品97AA片在线播放| 免费视频在线2021入口| 国产新AV天堂| 永久毛片在线播| 91破解版在线亚洲| 国产高清在线观看| 国产黄网站在线观看| aⅴ免费在线观看|