版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
面向對象課件第四章第一頁,共九十頁,編輯于2023年,星期五第四章函數(shù)
§4.1
函數(shù)概述
§4.2
函數(shù)的定義和聲明
§4.3
函數(shù)的調(diào)用
§4.4
參數(shù)傳遞
§4.5
標識符的作用域
§4.6
變量的生存期
§4.7
遞歸函數(shù)
§4.8
C++的庫函數(shù)第二頁,共九十頁,編輯于2023年,星期五§4.1
函數(shù)概述
c++函數(shù)特點:獨立完成某個功能的語句塊封裝了程序代碼和數(shù)據(jù),實現(xiàn)了更高 級的抽象減少代碼重復,提高程序的可重用性第三頁,共九十頁,編輯于2023年,星期五§4.1
函數(shù)概述
函數(shù)的幾個例子
例1: intbigger(inta,intb) { return(a>b)?a:b; } //找出最大數(shù)
獲取參數(shù)并返回值第四頁,共九十頁,編輯于2023年,星期五§4.1
函數(shù)概述
例2: voiddelay(longa) { for(inti=1;i<=a;i++); } //延遲一個小的時間片
獲取參數(shù)但不返回值第五頁,共九十頁,編輯于2023年,星期五§4.1
函數(shù)概述
例3: intgeti() { intx; cout<<“pleaseinputainteger:\n”; cin>>x; returnx; } //從鍵盤上獲取一個整數(shù)
不獲取參數(shù)但返回值第六頁,共九十頁,編輯于2023年,星期五§4.1
函數(shù)概述
例4: voidmessage() { cout<<“Thisisamessage.\n”; } //在屏幕上顯示一條消息
不獲取參數(shù)也不返回值第七頁,共九十頁,編輯于2023年,星期五§4.2函數(shù)的定義和聲明
函數(shù)結構函數(shù)頭+函數(shù)體
返回值函數(shù)名(參數(shù)表) { 函數(shù)體 }第八頁,共九十頁,編輯于2023年,星期五§4.2函數(shù)的定義和聲明
函數(shù)結構答疑函數(shù):詢問老師參數(shù):詢問的題目返回:答案動作:解答題目訂餐函數(shù):訂餐參數(shù):訂的菜單返回:是或否動作:做菜并送到家第九頁,共九十頁,編輯于2023年,星期五§4.2函數(shù)的定義和聲明
函數(shù)的定義
一般形式:
類型函數(shù)名(形參表) { 語句組 }
注:1.默認的函數(shù)類型是int 2.不允許函數(shù)定義嵌套第十頁,共九十頁,編輯于2023年,星期五§4.2函數(shù)的定義和聲明不允許函數(shù)定義嵌套如:
voidmain() { intfunc() { … } …… }函數(shù)獨立完成某個功能,函數(shù)與函數(shù)之間通過參數(shù)和返回值聯(lián)系參數(shù)---函數(shù)的輸入返回值---函數(shù)的輸出第十一頁,共九十頁,編輯于2023年,星期五§4.2函數(shù)的定義和聲明
函數(shù)的聲明(即函數(shù)原型)
返回類型函數(shù)名(參數(shù)表);函數(shù)原型的作用: 聲明了函數(shù)的參數(shù)情況及返回值第十二頁,共九十頁,編輯于2023年,星期五§4.2函數(shù)的定義和聲明說明: 1、函數(shù)原型是一條程序語句,須以分號結尾 2、函數(shù)原型的參數(shù)表中可只包含參數(shù)的類型如:
intarea(int,int);intarea(intlength,intwidth);左邊也是合法的,只關心參數(shù)的個數(shù)和類型第十三頁,共九十頁,編輯于2023年,星期五§4.2函數(shù)的定義和聲明函數(shù)的定義和函數(shù)聲明的關系 #include<iostream.h> #include<math.h> voidmain() { doublex; cout<<sin(x); }
函數(shù)原型doublesin(double);第十四頁,共九十頁,編輯于2023年,星期五§4.2函數(shù)的定義和聲明函數(shù)的定義與聲明的關系
voidmain() { func(); } voidfunc() { …… }
voidfunc();voidmain() {func();}voidfunc(){ ……}第十五頁,共九十頁,編輯于2023年,星期五§4.2函數(shù)的定義和聲明
函數(shù)聲明的原則:
如果一個函數(shù)定義在先,調(diào)用在后,調(diào)用前可不必聲明 如果一個函數(shù)定義在后,調(diào)用在先,調(diào)用前必須聲明第十六頁,共九十頁,編輯于2023年,星期五§4.2函數(shù)的定義和聲明
總結
1、函數(shù)在使用前必須先聲明或先定義 2、函數(shù)的定義只有一次,但函數(shù)的聲明可以 出現(xiàn)多次 3、函數(shù)的定義和聲明必須在參數(shù)、返回值方 面保持一致第十七頁,共九十頁,編輯于2023年,星期五§4.2函數(shù)的定義和聲明例:原型 intarea(int,int); 調(diào)用c=area(10,5,8); 例:
voidfun(int,float); intmain() { inta; floatb; fun(a,b); } voidfun(int,int) { …… }
//參數(shù)個數(shù)不同參數(shù)類型不一致第十八頁,共九十頁,編輯于2023年,星期五§4.2函數(shù)的定義和聲明引用本文件外的函數(shù)時,需用#include將包含該函數(shù)的文件嵌入到當前位置#include有兩種形式: 形式一:#include<文件名> 形式二:#include“文件名” 形式一用于C++提供的庫函數(shù),存放在C++系統(tǒng)目錄中的include子目錄中 形式二用于程序員開發(fā)的模塊,存放在工作目錄中第十九頁,共九十頁,編輯于2023年,星期五§4.3函數(shù)的調(diào)用
1、函數(shù)的調(diào)用和返回 2、函數(shù)的調(diào)用過程 3、函數(shù)調(diào)用的實現(xiàn)—棧第二十頁,共九十頁,編輯于2023年,星期五§4.3函數(shù)的調(diào)用
函數(shù)通過調(diào)用發(fā)揮作用在面向對象思想中,函數(shù)調(diào)用成為對象之間 發(fā)送消息的工具intA(){B();}intclassA::A(){classB::B();}第二十一頁,共九十頁,編輯于2023年,星期五§4.3函數(shù)的調(diào)用⑴函數(shù)調(diào)用語句
函數(shù)名(參數(shù)表);參數(shù)表,由0個,1個或多個實際參數(shù)組成實參的個數(shù)由形參決定,調(diào)用函數(shù)時實參給形參初始化實參對形參初始化是按其位置對應進行第二十二頁,共九十頁,編輯于2023年,星期五§4.3函數(shù)的調(diào)用⑵函數(shù)的返回
函數(shù)返回的條件: ①執(zhí)行到函數(shù)的最后一條語句 ②遇到return語句(語句格式如下) return<表達式>; 或 return;第二十三頁,共九十頁,編輯于2023年,星期五§4.3函數(shù)的調(diào)用
return<表達式>;語句的實現(xiàn)過程
1、先計算出表達式的值;
2、當表達式類型與函數(shù)類型不同時,將表達 式的類型自動、強制性地轉換為函數(shù)的類 型,可能出現(xiàn)不保值的情況
3、將表達式的值返回給調(diào)用函數(shù)
4、將程序執(zhí)行的控制權由被調(diào)函數(shù)轉向調(diào)用 函數(shù),執(zhí)行調(diào)用函數(shù)后面的語句第二十四頁,共九十頁,編輯于2023年,星期五§4.3函數(shù)的調(diào)用
return;語句
無返回值,只返回程序執(zhí)行的控制權對于無返回值的函數(shù)須用void來說明類型在函數(shù)中return;語句可有可無若沒有return;語句,執(zhí)行到函數(shù)體的最后 一條語句時返回調(diào)用函數(shù)第二十五頁,共九十頁,編輯于2023年,星期五§4.3函數(shù)的調(diào)用
main函數(shù)main函數(shù)是由系統(tǒng)調(diào)用的第一個函數(shù)main函數(shù)直接或間接調(diào)用程序中所有其他函數(shù)main函數(shù)的參數(shù)通過命令行提供: 如:copyarg1arg2main函數(shù)返回值給調(diào)用它的系統(tǒng) (0為正常返回,1為異常返回)main函數(shù)默認的類型是int第二十六頁,共九十頁,編輯于2023年,星期五§4.3函數(shù)的調(diào)用函數(shù)的調(diào)用過程main(){…………a();…………}a(){…………b();…………}b(){…………………………}第二十七頁,共九十頁,編輯于2023年,星期五§4.3函數(shù)的調(diào)用3.函數(shù)調(diào)用的實現(xiàn)--棧
棧中存放的內(nèi)容: -調(diào)用函數(shù)的返回地址 -傳遞參數(shù) -被調(diào)用函數(shù)的局部變量參數(shù)2
返回地址
參數(shù)1局部變量第二十八頁,共九十頁,編輯于2023年,星期五§4.3函數(shù)的調(diào)用
函數(shù)調(diào)用過程:①首先建立被調(diào)用函數(shù)的??臻g;②保護調(diào)用函數(shù)的運行狀態(tài)和返回地址③傳遞函數(shù)實參給形參;④執(zhí)行被調(diào)用函數(shù)的函數(shù)體內(nèi)語句;⑤將控制權轉交給調(diào)用函數(shù)第二十九頁,共九十頁,編輯于2023年,星期五§4.3函數(shù)的調(diào)用函數(shù)調(diào)用時棧的變化過程main()a()b()C()main()main()main()a()main()a()
b()main()a()
b()main()a()第三十頁,共九十頁,編輯于2023年,星期五§4.3函數(shù)的調(diào)用 函數(shù)調(diào)用的實現(xiàn)——棧 說明:
函數(shù)的局部變量是臨時存放的??臻g是有限的第三十一頁,共九十頁,編輯于2023年,星期五§4.4參數(shù)傳遞
參數(shù)傳遞方式傳值調(diào)用設置參數(shù)的默認值第三十二頁,共九十頁,編輯于2023年,星期五§4.4參數(shù)傳遞參數(shù)傳遞方式:
⑴傳值調(diào)用 單向:調(diào)用函數(shù) ⑵傳址調(diào)用(c語言中沒有傳址調(diào)用)
雙向:調(diào)用函數(shù)被調(diào)用函數(shù)實參形參被調(diào)用函數(shù)實參形參第三十三頁,共九十頁,編輯于2023年,星期五§4.4參數(shù)傳遞C++變量的值有兩種變量本身值(傳值調(diào)用)變量地址值(傳址調(diào)用)用指針實參:常量、變量值、表達式值形參:變量
第三十四頁,共九十頁,編輯于2023年,星期五§4.4參數(shù)傳遞傳值調(diào)用的實現(xiàn) 函數(shù)調(diào)用時,系統(tǒng)先計算實參的值,再將實參的值按位置對應賦給形參。傳值調(diào)用的實現(xiàn)機制 系統(tǒng)將實參拷貝一個副本(存放在被調(diào)用函數(shù)的棧中)給形參。傳值調(diào)用的特點
形參值的改變不影響實參。第三十五頁,共九十頁,編輯于2023年,星期五例:#include<iostream.h> voidswap(int,int); voidmain() { inta=5,b=9; swap(a,b); cout<<“a=“<<a<<“,”<<“b=“<<b<<endl; } voidswap(intx,inty) { inttemp; temp=x; x=y; y=temp; cout<<“x=“<<x<<“,”<<“y=“<<y<<endl; }第三十六頁,共九十頁,編輯于2023年,星期五
程序運行結果: x=9, y=5 a=5,b=9
由執(zhí)行結果可知:實參的值沒有改變第三十七頁,共九十頁,編輯于2023年,星期五§4.4參數(shù)傳遞設置參數(shù)的默認值 當需要使用相同的實參反復調(diào)用某函數(shù)時,c++允許給參數(shù)設置默認值例: intfun(inta,intb=5,intc=8);fun函數(shù)的三個參數(shù)中,有兩個設置了默認值第三十八頁,共九十頁,編輯于2023年,星期五§4.4參數(shù)傳遞例:voiddelay(intloops) { if(loops==0) return; for(inti=0;i<loops;i++); }函數(shù)聲明:voiddelay(intloops=1000);函數(shù)調(diào)用:delay(2500); delay(); //loops使用默認值1000第三十九頁,共九十頁,編輯于2023年,星期五§4.4參數(shù)傳遞在設置和使用默認參數(shù)時應注意:⑴默認參數(shù)在函數(shù)聲明中提供,當只有函數(shù)定義時,默認參數(shù)才可出現(xiàn)在函數(shù)定義中⑵一個函數(shù)的多個參數(shù)中,既有默認值也有非 默認值時應將默認值放在參數(shù)表的最右端。 如:
intfun(inti=8,charc,intj=45);//error!第四十頁,共九十頁,編輯于2023年,星期五§4.4參數(shù)傳遞
⑶函數(shù)調(diào)用時,給定的實參值將取代參數(shù)的默認值,沒有給定實參值將使用默認值
⑷默認參數(shù)即可以是數(shù)值,也可以是表達式第四十一頁,共九十頁,編輯于2023年,星期五§4.4參數(shù)傳遞例:分析程序的執(zhí)行結果
#include<iostream.h> voidfun(inta=1,intb=2,intc=3) { cout<<“a=“<<a<<“,b=”<<b<<“,c=”<<c<<endl; } voidmain() { fun(); fun(9); fun(4,5); fun(7,8,9); }執(zhí)行結果:a=1,b=2,c=3a=9,b=2,c=3a=4,b=5,c=3a=7,b=8,c=9第四十二頁,共九十頁,編輯于2023年,星期五§4.4參數(shù)傳遞例: #include<iostream.h> intq=5,p=7; intsum_int(inta,intb=q+p,intc=q*p); voidmain() { intx=5,y=10; ints1=sum_int(x); ints2=sum_int(x,y); cout<<“s1=”<<s1<<‘\n’<<“s2=“<<s2<<endl; } intsum_int(inti,intj,intk) { returni+j+k; }第四十三頁,共九十頁,編輯于2023年,星期五§4.5
標識符的作用域
作用域是指標識符的作用范圍 在C++程序中出現(xiàn)的各種標識符,都有著不同的作用域標識符的作用域規(guī)則: 標識符只能在說明它或定義它的范圍內(nèi)是可見的(可進行存取或訪問操作)第四十四頁,共九十頁,編輯于2023年,星期五§4.5標識符的作用域作用域的種類種類
作用域
程序級 組成該程序的所有文件文件級 從定義的地方起到文件結束函數(shù)級 函數(shù)體內(nèi)。包括形參、函數(shù)內(nèi)定義 的變量塊級 從定義的地方起到相應的塊尾 包括if、swicth、循環(huán)中定義的 變量作用域最大的是程序級,最小的是塊級第四十五頁,共九十頁,編輯于2023年,星期五§4.5標識符的作用域例:
intglobal,i; voidfun1(intpara1,intpara2) { intlocal1,local2,j; if(para1==para2) { intk; …… } } intfun2() { …… }K塊域local1,local2,j函數(shù)域global,i文件域第四十六頁,共九十頁,編輯于2023年,星期五§4.5標識符的作用域關于重新定義標識符的作用域規(guī)定在同一作用域內(nèi),不能有同名變量存在在不同的作用域內(nèi),允許定義同名變量第四十七頁,共九十頁,編輯于2023年,星期五§4.5標識符的作用域例: voidfun() { inta; floata; { floata; …… } …… }//非法//合法注:①塊內(nèi)的floata在塊內(nèi)可見,且存在②inta在塊內(nèi)不可見,但存在第四十八頁,共九十頁,編輯于2023年,星期五例:分析下列程序的輸出結果#include<iostream.h>voidmain(){ inta=5,b=7,c=10; cout<<a<<“,”<<b<<“,”<<c<<endl; { intb=8; floatc=8.8; cout<<a<<“,”<<b<<“,”<<c<<endl; a=b; { intc; c=b; cout<<a<<“,”<<b<<“,”<<c<<endl; } cout<<a<<“,”<<b<<“,”<<c<<endl; } cout<<a<<“,”<<b<<“,”<<c<<endl;}運行結果:5,7,105,8,8.88,8,88,8,8.88,7,10第四十九頁,共九十頁,編輯于2023年,星期五例:分析下列程序的輸出結果#include<iostream.h>voidmain(){ inti=5; for(;i>0;i--) { inti=25; cout<<i<<‘\t’; } cout<<‘\n’<<i<<‘\n’;}程序執(zhí)行結果:2525252525 0
第五十頁,共九十頁,編輯于2023年,星期五§4.5標識符的作用域局部變量與全局變量 在函數(shù)內(nèi)或塊內(nèi)定義的變量為局部變量 在文件內(nèi)或程序內(nèi)定義的變量為全局變量局部變量的特點:提高函數(shù)的獨立性和安全性全局變量的特點:可作為函數(shù)之間通信的一種方 式,但這種方式是不安全的, 不建議使用。第五十一頁,共九十頁,編輯于2023年,星期五§4.5標識符的作用域函數(shù)之間的通信方式有兩種: ⑴參數(shù)傳遞和返回值 ⑵使用全局變量 在軟件開發(fā)中,應盡量用參數(shù)傳遞取代全局變量,少用或不用全局變量第五十二頁,共九十頁,編輯于2023年,星期五例:演示局部變量與全局變量(書上96頁程序4.4.1)#include<iostream.h>voidfunc1();voidfunc2();voidmain(){ cout<<“Novariablesdefinedinmain\n”; func1();}intage;voidfunc1(){ age=45; cout<<“Ageinfunc1()is”<<age<<‘\n’; func2();}voidfunc2(){ cout<<“Ageinfunc2()is”<<age<<‘\n’;}//問題:intage;移到不同位置時,其結果如何?第五十三頁,共九十頁,編輯于2023年,星期五§4.6
變量的生存期變量的存儲類型C++程序的存儲組織auto和register變量extern變量static變量第五十四頁,共九十頁,編輯于2023年,星期五§4.6
變量的生存期變量的存儲類型 C++變量除有數(shù)據(jù)類型外還有存儲類型
數(shù)據(jù)類型:決定變量的存儲方式,取值范圍, 可進行的操作
存儲類型:決定變量的生存期,分配內(nèi)存的 方式,初始化情況第五十五頁,共九十頁,編輯于2023年,星期五§4.6
變量的生存期變量具有下列四種存儲類型之一: auto 自動型 register 寄存器型 static 靜態(tài)型 extern 外部型修飾局部變量修飾局部、全局變量第五十六頁,共九十頁,編輯于2023年,星期五§4.6
變量的生存期變量的存儲類型在定義變量時聲明格式:
存儲類型數(shù)據(jù)類型變量名; 例: autointi; staticcharc;
默認存儲類型:
局部變量auto
全局變量extern第五十七頁,共九十頁,編輯于2023年,星期五§4.6
變量的生存期
C++程序的存儲組織 內(nèi)存分布:C++將內(nèi)存分為四個部分程序代碼程序數(shù)據(jù)堆棧靜態(tài)區(qū)動態(tài)區(qū)全局變量靜態(tài)變量動態(tài)申請的變量局部變量靜態(tài)局部變量靜態(tài)全局變量第五十八頁,共九十頁,編輯于2023年,星期五§4.6
變量的生存期靜態(tài)區(qū): ⑴該區(qū)內(nèi)的變量具有全局壽命 ⑵初始化為0,且只初始化一次動態(tài)區(qū): ⑴程序運行過程中根據(jù)需要動態(tài)分配與 釋放內(nèi)存空間 ⑵必須初始化,否則初始化值隨機第五十九頁,共九十頁,編輯于2023年,星期五§4.6
變量的生存期例: inti; //局部變量 cout<<i; //未初始化就使用(垃圾值)
輸出結果: -26956
一個程序兩次調(diào)用同一個函數(shù),分配給該函數(shù)中局部變量的內(nèi)存地址可能是不同的第六十頁,共九十頁,編輯于2023年,星期五§4.6
變量的生存期例:
{ …… intsum; //sum沒有確定值 for(inti=1;i<=10;i++) sum+=i; cout<<sum<<endl; }
求和的值是無意義的應將intsum;改為intsum=0;第六十一頁,共九十頁,編輯于2023年,星期五§4.6
變量的生存期auto和register變量 特點:
⑴只修飾局部變量 ⑵局部壽命(生命期與作用域一致) ⑶必須初始化或賦值后才能使用 (沒有默認值)第六十二頁,共九十頁,編輯于2023年,星期五§4.6
變量的生存期auto與register的區(qū)別
⑴register
的存取速度比auto快
⑵缺省是auto
(因此,局部變量一般不指定存儲類型)第六十三頁,共九十頁,編輯于2023年,星期五§4.6
變量的生存期extern變量 特點:
⑴全局壽命(作用域最大,是整個程序)
⑵extern變量的定義和說明是兩回事, 只能定義一次,可以說明多次 ⑶定義時,可省略extern,應定義在函數(shù) 體之外,可出現(xiàn)在程序頭、中、尾
第六十四頁,共九十頁,編輯于2023年,星期五§4.6
變量的生存期
⑷說明時,須加extern,下列情況必須說明:
①同一文件中的外部變量,如果定義在后, 引用在先,引用前必須說明 ②在程序的一個文件中定義的外部變量, 要在程序中的另一個文件中引用,則引 用前必須說明 ⑸外部變量定義后,具有默認值: int型為0,char型為空,浮點型為0.0第六十五頁,共九十頁,編輯于2023年,星期五例: #include<iostream.h> voidmain() { externinta; intfun(int); inty=fun(a); cout<<y<<endl; } inta=5; intfun(intx) { intb=6; return(a+b)*x; }//說明外部變量a,因為a的定義在后//定義外部變量a,作用域是整個程序//b是auto型,作用域是fun()函數(shù)內(nèi)//y是auto型,作用域是main()函數(shù)內(nèi)//程序執(zhí)行結果:55第六十六頁,共九十頁,編輯于2023年,星期五§4.6
變量的生存期static變量 特點:
⑴說明或定義時,須加static ⑵分為靜態(tài)局部變量和靜態(tài)全局變量 ⑶作用域與生命期不一致 ⑷定義或說明后具有默認值(同extern)
第六十七頁,共九十頁,編輯于2023年,星期五§4.6
變量的生存期靜態(tài)變量可分為: 靜態(tài)局部變量和靜態(tài)全局變量二者的區(qū)別: 靜態(tài)局部變量:定義在函數(shù)體內(nèi)或程序塊內(nèi) 靜態(tài)全局變量:定義在函數(shù)體外
第六十八頁,共九十頁,編輯于2023年,星期五§4.6
變量的生存期靜態(tài)局部變量: 作用域是在定義它的函數(shù)體內(nèi)或程序塊內(nèi),而生命期是整個程序
(作用域內(nèi)可見且存在,作用域外不可見但存在)第六十九頁,共九十頁,編輯于2023年,星期五§4.6
變量的生存期靜態(tài)局部變量與auto變量的區(qū)別:
①auto變量的作用域與生命期一致
②auto變量每次調(diào)用,被重新初始化,
static變量每次調(diào)用都保留改變后的值例:靜態(tài)變量用于調(diào)用計數(shù)
voidCountFun() { staticintcount=0; count++; cout<<“Youhavecalledme“<<count<<“times!”; }第七十頁,共九十頁,編輯于2023年,星期五§4.6
變量的生存期靜態(tài)全局變量 作用域是在定義或說明它的文件中,從定義或說明處開始到文件尾
生命期是整個程序第七十一頁,共九十頁,編輯于2023年,星期五例:分析程序執(zhí)行結果
#include<iostream.h> voidmain() { inta=3; staticintb; //靜態(tài)局部變量 b+=fun(a); cout<<“a=“<<a<<“,b=“<<b<<endl; b+=fun(a); cout<<“a=“<<a<<“,b=“<<b<<endl; } staticinta=10; //靜態(tài)全局變量 intfun(intx) { staticintb=5; //靜態(tài)局部變量 b+=a; cout<<“a=“<<a<<“,b=“<<b<<endl; returnb; }第七十二頁,共九十頁,編輯于2023年,星期五§4.6
變量的生存期程序執(zhí)行結果 a=10,b=15 a=3,b=15 a=10,b=25 a=3,b=40第七十三頁,共九十頁,編輯于2023年,星期五§4.7
遞歸函數(shù)直接遞歸與間接遞歸遞歸調(diào)用的過程遞歸設計的要點舉例:漢諾塔問題遞歸評價第七十四頁,共九十頁,編輯于2023年,星期五§4.7
遞歸函數(shù)遞歸函數(shù)有兩種: 直接遞歸——自己調(diào)用自己 間接遞歸——A調(diào)用B,B調(diào)用A第七十五頁,共九十頁,編輯于2023年,星期五§4.7
遞歸函數(shù)直接遞歸與間接遞歸
直接遞歸
間接遞歸
A(intn) A(intn) { { …… …… A(n-1); B(n-1); …… …… } } B(intn) { …… A(n-1); ……
}第七十六頁,共九十頁,編輯于2023年,星期五§4.7
遞歸函數(shù)遞歸設計的要點遞歸結束條件
??臻g是有限的復雜性降低
f(n)變?yōu)閒(n-1)或者f(n-2)的問題,參數(shù) 應逐漸逼近遞歸結束條件遞歸操作
每次遞歸能完成一些操作(具有一些功能)第七十七頁,共九十頁,編輯于2023年,星期五§4.7
遞歸函數(shù)遞歸調(diào)用的過程(兩個階段)
遞推:先將原問題不斷分解成新的子問題, 逐漸從未知向已知方向推測,最后到 達已知條件,即遞歸結束條件
回歸:從已知條件出發(fā),按“遞推”的逆過程, 逐一求值回歸,最后到達遞歸開始處, 結束回歸,完成遞歸調(diào)用第七十八頁,共九十頁,編輯于2023年,星期五§4.7
遞歸函數(shù)求n!的遞歸算法求值過程說明上述兩個階段
3!=3*2! 3!=3*2!=3*2=6
2!=2*1! 2!=2*1!=2*1=2 1!=1*0! 1!=1*0!=1*1=1
0!=1遞推①遞推②遞推③回歸①回歸③回歸②第七十九頁,共九十頁,編輯于2023年,星期五§4.7
遞歸函數(shù)求n!的函數(shù)定義
longfact(intn) { if(n==0) //遞歸結束條件 return1; returnn*fact(n-1); //遞歸調(diào)用語句 }
第八十頁,共九十頁,編輯于2023年,星期五例:從鍵盤輸入一個正整數(shù),編程求出該數(shù)的階乘
#include<iostream.h> longfac
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年人教A版選擇性必修1語文下冊月考試卷含答案
- 2025年冀少新版七年級物理下冊階段測試試卷含答案
- 2025年外研版2024九年級生物上冊月考試卷
- 2025年人教五四新版選擇性必修3地理下冊階段測試試卷
- 二零二五年度拍賣會組織與策劃合同4篇
- 二零二五版門禁系統(tǒng)與物業(yè)管理系統(tǒng)對接合同4篇
- 二零二五年度外資企業(yè)內(nèi)部退養(yǎng)合同模板4篇
- 2025年度醫(yī)療機構科室承包合作框架合同4篇
- 二零二五年度變壓器用新型導磁材料研發(fā)與安裝合同3篇
- 2025版木門安裝與室內(nèi)空氣凈化服務合同5篇
- 鹽酸埃克替尼臨床療效、不良反應與藥代動力學的相關性分析的開題報告
- 消防設施安全檢查表
- 組合結構設計原理 第2版 課件 第6、7章 鋼-混凝土組合梁、鋼-混凝土組合剪力墻
- 建筑公司資質常識培訓課件
- 旅居管家策劃方案
- GB/T 26316-2023市場、民意和社會調(diào)查(包括洞察與數(shù)據(jù)分析)術語和服務要求
- 春節(jié)值班安全教育培訓
- 帶狀皰疹護理查房
- 平衡計分卡-化戰(zhàn)略為行動
- 幼兒園小班下學期期末家長會PPT模板
- 幼兒教師干預幼兒同伴沖突的行為研究 論文
評論
0/150
提交評論