![遞歸匯總課件_第1頁](http://file4.renrendoc.com/view/8a2729eca365f440c5093f032ef22c83/8a2729eca365f440c5093f032ef22c831.gif)
![遞歸匯總課件_第2頁](http://file4.renrendoc.com/view/8a2729eca365f440c5093f032ef22c83/8a2729eca365f440c5093f032ef22c832.gif)
![遞歸匯總課件_第3頁](http://file4.renrendoc.com/view/8a2729eca365f440c5093f032ef22c83/8a2729eca365f440c5093f032ef22c833.gif)
![遞歸匯總課件_第4頁](http://file4.renrendoc.com/view/8a2729eca365f440c5093f032ef22c83/8a2729eca365f440c5093f032ef22c834.gif)
![遞歸匯總課件_第5頁](http://file4.renrendoc.com/view/8a2729eca365f440c5093f032ef22c83/8a2729eca365f440c5093f032ef22c835.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第5章
遞歸
21世紀(jì)高等院校規(guī)劃教材返回總目錄5.1
?2006第5章
遞歸遞歸了解遞歸的定義遞歸的范例何時(shí)不要使用遞歸5.2
?2006遞歸了解遞歸的定義5.2關(guān)于遞歸遞歸:一個(gè)調(diào)用它本身的函數(shù)稱為遞歸(Recursive)。遞歸是一個(gè)比較抽象的問題,它隱含地利用了堆棧作為其存放臨時(shí)數(shù)據(jù)的場所,給人一種神秘的感覺。在程序設(shè)計(jì)中,利用遞歸來解決某些問題,既經(jīng)濟(jì)又方便。
5.3
?2006關(guān)于遞歸遞歸:一個(gè)調(diào)用它本身的函數(shù)稱為遞歸(Recursiv遞歸范例—計(jì)算某數(shù)的階乘計(jì)算某數(shù)的階乘。如求n!。n!=n*(n-1)!(n-1)!=(n-1)*(n-2)!(n-2)!=(n-2)*(n-3)!…1!=1
C語言程序段將以遞歸方式計(jì)算n!intfact(intn){intans;if(n==1)ans=1;elseans=n*fact(n-1);returnans;}
在編寫遞歸時(shí)必須有一個(gè)結(jié)束點(diǎn),使得函數(shù)得以往上追溯。如上例中,當(dāng)n=1時(shí),1!=1即為其結(jié)束點(diǎn)。5.4
?2006遞歸范例—計(jì)算某數(shù)的階乘計(jì)算某數(shù)的階乘。C語言程序段將以遞歸遞歸范例—費(fèi)波那契數(shù)列
費(fèi)波那契數(shù)列(Fibonaccinumber)表示某一數(shù)為其前兩個(gè)數(shù)的和。假設(shè)n0=1,n1=1則n2=n1+n0=1+1=2n3=n2+n1=2+1=3…所以ni=ni-1+ni-2。
用C語言程序段將實(shí)現(xiàn)費(fèi)波那契數(shù)列:intfibon(intn){intans;if(n==0||n==1)ans=1;elseans=fibon(n-1)+fibon(n-2);return(ans);}5.5
?2006遞歸范例—費(fèi)波那契數(shù)列費(fèi)波那契數(shù)列(Fibonaccin利用遞歸函數(shù)計(jì)算N階乘/*
filename:factor.c
Description:利用遞歸函數(shù)調(diào)用計(jì)算N階乘#include<stdio.h>#include<conio.h>#include<ctype.h>
/*函數(shù)原型聲明*/longFactorial(long);5.6
?2006利用遞歸函數(shù)計(jì)算N階乘/*5.6利用遞歸函數(shù)計(jì)算N階乘
(續(xù)1)voidmain(){
charch;
longn;printf("-----FactorialcountingUsingRecursive—--");
do
{printf("\nEnteranumber(0<=n<=12)tocountn!:");
scanf("%ld",&n);
/*n值在一般系統(tǒng)中超過13會(huì)產(chǎn)生overflow得到不正確的值*5.7
?2006利用遞歸函數(shù)計(jì)算N階乘
(續(xù)1)voidmain()5.利用遞歸函數(shù)計(jì)算N階乘
(續(xù)2)voidmain(){
charch;
longn;printf("-----FactorialcountingUsingRecursive—--");
do
{printf("\nEnteranumber(0<=n<=12)tocountn!:");
scanf("%ld",&n);
/*n值在一般系統(tǒng)中超過13會(huì)產(chǎn)生overflow得到不正確的值*5.8
?2006利用遞歸函數(shù)計(jì)算N階乘
(續(xù)2)voidmain()5.利用遞歸函數(shù)計(jì)算N階乘
(續(xù)3)if(n<0||n>12)
printf("inputoutofrange!\n");
else
printf("%ld!=%ld\n",n,Factorial(n));
printf("Continue(y/n)?");
ch=toupper(getche());
}while(ch=='Y');}5.9
?2006利用遞歸函數(shù)計(jì)算N階乘
(續(xù)3)if(n利用遞歸函數(shù)計(jì)算N階乘
(續(xù)4)/*利用遞歸調(diào)用自己計(jì)算N階乘*/longFactorial(longn){
if(n==1||n==0)
return(1);
else
return(n*Factorial(n-1));}5.10
?2006利用遞歸函數(shù)計(jì)算N階乘
(續(xù)4)/*利用遞歸調(diào)用自己計(jì)算N程序?qū)嵗妮敵鼋Y(jié)果-----FactorialcountingUsingRecursive----Enteranumber(0<=n<=12)tocountn!:55!=120Continue(y/n)?n5.11
?2006程序?qū)嵗妮敵鼋Y(jié)果-----Factorialcounti程序?qū)嵗某绦蛘f明例如,n=5時(shí),遞歸函數(shù)執(zhí)行如下:Factorial(5)=5*Factorial(4) =5*(4*Factorial(3)) =5*(4*(3*Factorial(2))) =5*(4*(3*(2*Factorial(1)))) =5*(4*(3*(2*1))) =5*(4*(3*2)) =5*(4*6) =5*24 =1205.12
?2006程序?qū)嵗某绦蛘f明例如,n=5時(shí),遞歸函數(shù)執(zhí)行如下:5.12利用循環(huán)做N階乘的計(jì)算/*
filename:factor_i.c Description:Factorialnumberscountunsingiterative
利用循環(huán)做N階乘的計(jì)算*/#include<stdio.h>#include<conio.h>#include<ctype.h>/*函數(shù)原型聲明*/longFactorial(long);5.13
?2006利用循環(huán)做N階乘的計(jì)算/*5.13利用循環(huán)做N階乘的計(jì)算(續(xù)1)voidmain(){ charch; longn;printf("-----FactorialcountingusingIterative-----");do { printf("\nEnteranumber(0<=n<=12)tocountn!:"); scanf("%ld",&n);5.14
?2006利用循環(huán)做N階乘的計(jì)算(續(xù)1)voidmain()5.1利用循環(huán)做N階乘的計(jì)算(續(xù)2)if(n<0||n>12) printf("Inputoutofrange!\n"); else printf("%ld!=%ld\n",n,Factorial(n));
printf("Continue(y/n)?"); ch=toupper(getche()); }while(ch=='Y');}
longFactorial(longn){ longsum=1; inti;5.15
?2006利用循環(huán)做N階乘的計(jì)算(續(xù)2)if利用循環(huán)做N階乘的計(jì)算(續(xù)3)if(n==0||n==1)/*當(dāng)n=0或n=1時(shí),0!=1,1!=1*/
return(1);/*直接傳回1*/
else { for(i=2;i<=n;i++)/*sum記錄目前階乘之和*/
sum*=i;/*sum與i相乘之和放回sum中*/ }
return(sum);}5.16
?2006利用循環(huán)做N階乘的計(jì)算(續(xù)3)if(n==程序?qū)嵗妮敵鼋Y(jié)果-----FactorialcountingusingIterative-----Enteranumber(0<=n<=12)tocountn!:1010!=3628800Continue(y/n)?n5.17
?2006程序?qū)嵗妮敵鼋Y(jié)果-----Factorialcount利用函數(shù)遞歸調(diào)用做費(fèi)波那契數(shù)列計(jì)算/*
filename:fib.c Description:Fibonaccinumbers
利用函數(shù)遞歸調(diào)用做費(fèi)氏數(shù)列計(jì)算費(fèi)氏數(shù)列為0,1,1,2,3,5,8,12,21,…其中某一項(xiàng)為前兩項(xiàng)之和,且第0項(xiàng)為0,第1項(xiàng)為1*/#include<stdio.h>#include<conio.h>#include<ctype.h>5.18
?2006利用函數(shù)遞歸調(diào)用做費(fèi)波那契數(shù)列計(jì)算/*5.18利用函數(shù)遞歸調(diào)用做費(fèi)波那契數(shù)列計(jì)算(續(xù)1)/*函數(shù)原型聲明*/longFibonacci(long);voidmain(){ charch; longn;printf("-----FibonaciinumbersUsingRecursive-----"); do {5.19
?2006利用函數(shù)遞歸調(diào)用做費(fèi)波那契數(shù)列計(jì)算(續(xù)1)/*函數(shù)原型聲利用函數(shù)遞歸調(diào)用做費(fèi)波那契數(shù)列計(jì)算(續(xù)2)
printf("\nEnteranumber(n>=0):"); scanf("%ld",&n); /*n值大于0*/
if(n<0) printf("Numbermustbe>0\n"); else printf("Fibonacci(%ld)%ld\n",n,Fibonacci(n)); printf("Contiune(y/n)?"); ch=toupper(getche()); }while(ch=='Y');}5.20
?2006利用函數(shù)遞歸調(diào)用做費(fèi)波那契數(shù)列計(jì)算(續(xù)2) pr利用函數(shù)遞歸調(diào)用做費(fèi)波那契數(shù)列計(jì)算(續(xù)3)/*利用遞歸函數(shù)調(diào)用本身函數(shù)來計(jì)算Fibonaccinumbers*/longFibonacci(longn){ if(n==0)/*第0項(xiàng)為0*/
return(0); elseif(n==1)/*第1項(xiàng)為1*/
return(1); else/*遞歸調(diào)用函數(shù)第N項(xiàng)為n-1跟
n-2項(xiàng)之和*/
return(Fibonacci(n-1)+Fibonacci(n-2));}5.21
?2006利用函數(shù)遞歸調(diào)用做費(fèi)波那契數(shù)列計(jì)算(續(xù)3)/*利用遞歸函程序?qū)嵗妮敵鼋Y(jié)果----FibonaciinumbersUsingRecursive-----Enteranumber(n>=0):15Fibonacci(15)=987Continue(y/n)?yEnteranumber(n>=0):25Fibonacci(25)=121393Continue(y/n)?n程序說明:費(fèi)氏數(shù)列為1,1,2,3,5,8,13,21,…,其中某一項(xiàng)為前兩項(xiàng)之和,且第0項(xiàng)為0,第1項(xiàng)為1。5.22
?2006程序?qū)嵗妮敵鼋Y(jié)果----Fibonaciinumbers利用循環(huán)法計(jì)算費(fèi)氏數(shù)列/*
filename:fib_i.c Description:Fibonaccinumberscountusingiterative
利用循環(huán)法計(jì)算費(fèi)氏數(shù)列費(fèi)氏數(shù)列為0,1,1,2,3,5,8,13,21,…
其中某一項(xiàng)為前兩項(xiàng)之和,且第0項(xiàng)為0,第1項(xiàng)為1*/5.23
?2006利用循環(huán)法計(jì)算費(fèi)氏數(shù)列/*5.23利用循環(huán)法計(jì)算費(fèi)氏數(shù)列
(續(xù)1)#include<stdio.h>#include<conio.h>#include<ctype.h>/*函數(shù)原型聲明*/longFibonacci(long);voidmain(){ charch; longn;5.24
?2006利用循環(huán)法計(jì)算費(fèi)氏數(shù)列
(續(xù)1)#include<std利用循環(huán)法計(jì)算費(fèi)氏數(shù)列
(續(xù)2)printf("-----FibonaccinumbersUsingIterative-----"); do { printf("\nEnteranumber(n>=0):"); scanf("%ld",&n); /*n值大于0*/
if(n<0) printf("Inputnumbermustbe>0!\n"); else printf("Fibonacci(%ld)=%ld\n",n,Fibonacci(n));5.25
?2006利用循環(huán)法計(jì)算費(fèi)氏數(shù)列
(續(xù)2)printf("利用循環(huán)法計(jì)算費(fèi)氏數(shù)列
(續(xù)3)printf("Continue(y/n)?"); ch=toupper(getche()); }while(ch=='Y');}longFibonacci(longn){
longbackitem1;/*前一項(xiàng)值*/longbackitem2;/*前兩項(xiàng)值*/
longthisitem;/*目前項(xiàng)數(shù)值*/
longi;5.26
?2006利用循環(huán)法計(jì)算費(fèi)氏數(shù)列
(續(xù)3)pri利用循環(huán)法計(jì)算費(fèi)氏數(shù)列
(續(xù)4)if(n==0)/*費(fèi)氏數(shù)列第0項(xiàng)為0*/
return(0); elseif(n==1)/*第2項(xiàng)為1*/
return(1); else { backitem2=0; backitem1=1; /*利用循環(huán)將前兩項(xiàng)相加后放入目前項(xiàng)*/ /*之后改變前兩項(xiàng)的值直到第n項(xiàng)求得*/5.27
?2006利用循環(huán)法計(jì)算費(fèi)氏數(shù)列
(續(xù)4)if(n=利用循環(huán)法計(jì)算費(fèi)氏數(shù)列
(續(xù)5)for(i=2;i<=n;i++) { /*F(i)=F(i-1)+F(i-2)*/ thisitem=backitem1+backitem2; /*改變前兩項(xiàng)之值*/
backitem2=backitem1; backitem1=thisitem; }
return(thisitem); }}5.28
?2006利用循環(huán)法計(jì)算費(fèi)氏數(shù)列
(續(xù)5)fo程序段輸出結(jié)果-----FibonaccinumbersUsingIterative-----Enteranumber(n>=0):10Fibonacci(10)=89Continue(y/n)?yEnteranumber(n>=0):20Fibonacci(20)=10946Continue(y/n)?n5.29
?2006程序段輸出結(jié)果-----Fibonaccinumbers何時(shí)不要使用遞歸遞歸雖然可以使用少數(shù)幾行的敘述就可解決一個(gè)復(fù)雜的問題,但有些問題會(huì)導(dǎo)致花更多的時(shí)間。由于非遞歸使用了較多的區(qū)域變量(localvariable),所以直覺上以為遞歸會(huì)較好,其實(shí)不然,因?yàn)檫f歸使用了更多的時(shí)間存
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年船舶潤滑油供應(yīng)合同
- 2025年機(jī)關(guān)單位臨時(shí)工兼職人員合同
- 2025年積分銷售合同協(xié)議書示例
- 2025年醫(yī)療設(shè)備策劃合作租賃與銷售框架合同
- 2025年住宅項(xiàng)目園林景觀設(shè)計(jì)合同
- 2025年農(nóng)地耕作權(quán)交換協(xié)議
- 2025年專利技術(shù)合同爭議處理方法
- 2025年企業(yè)資產(chǎn)重組授權(quán)代理協(xié)議指導(dǎo)
- 2025年智能穿戴項(xiàng)目申請(qǐng)報(bào)告模式
- 2025年共同投資合作成果合作協(xié)議書
- 高教社新國規(guī)中職英語教材《英語2基礎(chǔ)模塊》英語2-U3-1.0
- 2023版設(shè)備管理體系標(biāo)準(zhǔn)
- 《工程款糾紛》課件
- 中建地下管廊豎井及矩形頂管專項(xiàng)施工方案
- 第7課互聯(lián)網(wǎng)應(yīng)用協(xié)議 課件 2023-2024學(xué)年浙教版(2023)初中信息技術(shù)七年級(jí)上冊(cè)
- 關(guān)于新能源汽車的論文1500字
- 診所規(guī)章制度匯編全套
- 中國音樂學(xué)院音樂基礎(chǔ)知識(shí)(四級(jí))(基本樂科)備考試題庫(含答案)
- 學(xué)校校長思政課講稿共五篇
- 有限公司事業(yè)合伙人管理辦法
- 演示文稿國庫集中支付總流程圖
評(píng)論
0/150
提交評(píng)論