過(guò)程抽象-函數(shù)課件_第1頁(yè)
過(guò)程抽象-函數(shù)課件_第2頁(yè)
過(guò)程抽象-函數(shù)課件_第3頁(yè)
過(guò)程抽象-函數(shù)課件_第4頁(yè)
過(guò)程抽象-函數(shù)課件_第5頁(yè)
已閱讀5頁(yè),還剩35頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

高級(jí)語(yǔ)言程序設(shè)計(jì)

§4過(guò)程抽象一函數(shù)

高級(jí)語(yǔ)言程序設(shè)計(jì)?2005春季

過(guò)程抽象

本章的內(nèi)容結(jié)構(gòu)和閱讀要點(diǎn)

-函數(shù)

■函數(shù)(§4.2)

■變量的局部性(§4.3)

■遞歸函數(shù)(§4.4)

■函數(shù)名重載(§4.5)

■內(nèi)聯(lián)函數(shù)(§4.6)

■條件編譯(§4.8)

2

高級(jí)語(yǔ)言程序設(shè)計(jì)?2005春季

過(guò)程抽象

-函數(shù)

§4.3變量的局部性

3

高級(jí)語(yǔ)言程序設(shè)計(jì)?2005春季

變量的局

全局變量

部性

全局變量與■全局變量是指定義在函數(shù)外部的變量,它們能被所

局部變量有函數(shù)使用。

變量的存儲(chǔ)

分配■全局變量可以定義在函數(shù)外的任何地方。如果在使

C++程序的用一個(gè)全局變量時(shí)未見(jiàn)到它的定義,則在使用前要

多模塊結(jié)構(gòu)對(duì)該全局變量進(jìn)行聲明。

標(biāo)識(shí)符的作

用域#incIude<iostream>

usingnamespacestd;voidf()

名空間intx(0);//全局變量{externintx;//全局變量聲明

voidf(){x++;}

voidg(){x++;}

X=o

intmain()nt

{f0;g0;x++;

cout?x?endI;

return0;

4

高級(jí)語(yǔ)言程序設(shè)計(jì)?2005春季

變量的局

局部變量

部性

全局變量與局部變量是指在復(fù)合語(yǔ)句中定義的變量,它們只能

局部變量在定義它們的復(fù)合語(yǔ)句(包括內(nèi)層復(fù)合語(yǔ)句)中使

變量的存儲(chǔ)

分配用。

C++程序的函數(shù)體中定義的變量只能在定義它們的函數(shù)體內(nèi)使

多模塊結(jié)構(gòu)

用。void千()

標(biāo)識(shí)符的作{inty;//局部變量

用域y++;//正確

x++;//錯(cuò)誤

名空間

)

voidmain()

{intx;

x++;//正確

y++;//錯(cuò)誤

while(){x++;//正確

5

高級(jí)語(yǔ)言程序設(shè)計(jì)?2005春季

變量的局

局部變量

部性

全局變量與局部變量的定義可以放在復(fù)合語(yǔ)句的任何位置,但

局部變量是在復(fù)合語(yǔ)句中局部變量定義之前不能使用它們。

變量的存儲(chǔ)

分配函數(shù)的形式參數(shù)也可以看成是局部變量,它們只能

C++程序的在相應(yīng)的函數(shù)中使用。

多模塊結(jié)構(gòu)

標(biāo)識(shí)符的作voidmain()

用域{……

x++;//錯(cuò)誤

名空間

intx;

while(){x++;//正確

}

)

6

高級(jí)語(yǔ)言程序設(shè)計(jì)?2005春季

變量的局

變量的存儲(chǔ)分配(生存期)

部性

全局變量與■通常把程序運(yùn)行時(shí)一個(gè)變量占有內(nèi)存空間的時(shí)間段

局部變量稱為該變量的生存期。

變量的存儲(chǔ)

分配■C++把變量的生存期分為靜態(tài)、自動(dòng)和動(dòng)態(tài)三種:

C++程序的?具有靜態(tài)生存期的變量,它們的內(nèi)存空間從程序開(kāi)始執(zhí)

多模塊結(jié)構(gòu)行時(shí)就進(jìn)行分配,直到程序結(jié)束時(shí)才收回它們的空間。

標(biāo)識(shí)符的作(全局變量具有靜態(tài)生存期)

用域

?具有自動(dòng)生存期的變量,它們的內(nèi)存空間在程序執(zhí)行到

名空間

定義它們的復(fù)合語(yǔ)句(包括函數(shù)體)時(shí)才分配;當(dāng)定義

它們的復(fù)合語(yǔ)句執(zhí)行結(jié)束時(shí),它們的空間將被收回。(

局部變量和函數(shù)參數(shù)一般具有自動(dòng)生存期)

?具有動(dòng)態(tài)生存期的變量,其內(nèi)存空間用new操作分配、用

delete操作收回。(動(dòng)態(tài)變量具有動(dòng)態(tài)生存期)

7

高級(jí)語(yǔ)言程序設(shè)計(jì)?2005春季

變量的局

存儲(chǔ)分配(生存期)

部性

全局變量與在定義局部變量時(shí),可以為它們加上存儲(chǔ)類修飾符

局部變量來(lái)指出它們的生存期。

變量的存儲(chǔ)

分配?auto:自動(dòng)存儲(chǔ)類,局部變量的默認(rèn)存儲(chǔ)類,具有自動(dòng)

生存期。

C++程序的

多模塊結(jié)構(gòu)?static:靜態(tài)存儲(chǔ)類,具有靜態(tài)生存期。

標(biāo)識(shí)符的作?register:寄存器存儲(chǔ)類(建議編譯程序?qū)⒕植孔兞康目?/p>

用域

間分配在CPU的寄存器中),具有自動(dòng)生存期。

名空間

static存儲(chǔ)類的局部變量的作用是:它能在函數(shù)調(diào)

用時(shí)獲得上一次調(diào)用結(jié)束時(shí)該局部變量的值,即

static存儲(chǔ)類使得某些局部變量的值能在函數(shù)多次

調(diào)用之間得以保留。

8

高級(jí)語(yǔ)言程序設(shè)計(jì)?2005春季

變量的局

存儲(chǔ)分配(生存期)一舉例

部性

全局變量與#inoIude<iostream>

局部變量usingnamespacestd;

變量的存儲(chǔ)intz=0;

voidf()

分配

{intx=0;

C++程序的staticinty=0;

多模塊結(jié)構(gòu)x++;y++;z++;

cout<X"x="x<<",y=,z?y<<",z=""zendl;

標(biāo)識(shí)符的作}

用域intmain()

{f();

名空間z++;

f();

return0;

}

9

高級(jí)語(yǔ)言程序設(shè)計(jì)?2005春季

變量的局

存儲(chǔ)分配(生存期)

部性

全局變量與■程序的內(nèi)存分配:

局部變量

?靜態(tài)數(shù)據(jù)區(qū)(staticdata):用于全局變量、static存儲(chǔ)類

變量的存儲(chǔ)的局部變量以及常量的內(nèi)存分配;

分配

?代碼區(qū)(code):存放所有的函數(shù)代碼;

C++程序的

多模塊結(jié)構(gòu)棧區(qū)(stack):用于auto存儲(chǔ)類的局部變量、函數(shù)的形

標(biāo)識(shí)符的作參以及函數(shù)調(diào)用時(shí)有關(guān)信息的內(nèi)存分配;

用域堆區(qū)(heap):用于動(dòng)態(tài)變量的內(nèi)存分配。

名空間

■在C++中如果定義變量時(shí)沒(méi)有進(jìn)行初始化,對(duì)于全

局變量和static存儲(chǔ)類的局部變量,編譯程序?qū)㈦[

式地將它們初始化為0;對(duì)于其他變量不進(jìn)行初始

化。

10

高級(jí)語(yǔ)言程序設(shè)計(jì)?2005春季

變量的局

C++程序的多模塊結(jié)構(gòu)

部性

全局變量與在邏輯上,一個(gè)C++程序由一些全局函數(shù)、全局常

局部變量量、全局變量/對(duì)象以及類的定義構(gòu)成,其中必須

變量的存儲(chǔ)

分配有且僅有一個(gè)名字為main的全局函數(shù)。

C++程序的在物理上,我們通常可以按照某種規(guī)則對(duì)構(gòu)成C++

多模塊結(jié)構(gòu)

程序的各個(gè)邏輯單位(全局函數(shù)、全局常量/變量/

標(biāo)識(shí)符的作

用域?qū)ο?、類等)的定義進(jìn)行分組,分別把它們放在若

名空間干個(gè)源文件中。

11

高級(jí)語(yǔ)言程序設(shè)計(jì)?2005春季

變量的局

C++程序的多模塊結(jié)構(gòu)

部性

全局變量與■在程序設(shè)計(jì)中,模塊是一個(gè)可單獨(dú)編譯的程序單

局部變量

位。一個(gè)模塊一般包含兩個(gè)部分:接口和實(shí)現(xiàn)。

變量的存儲(chǔ)

分配■在C++中,一個(gè)模塊通常由兩個(gè)源文件構(gòu)成:.h

C++程序的文件(用于存放模塊的接口定義)和.cpp文件(

多模塊結(jié)構(gòu)

用于存放模塊的實(shí)現(xiàn))。

標(biāo)識(shí)符的作

用域■文件包含命令:

名空間#includev文件名〉:在系統(tǒng)指定的目錄下尋找指定的文

件;

?#include“文件名”:先在包含葫句必一命令的源文件所

在的目錄下查找指定文件,然后再在系統(tǒng)指定的目錄下

尋找指定文件。

12

高級(jí)語(yǔ)言程序設(shè)計(jì)?2005春季

變量的局

程序的多模塊結(jié)構(gòu)一舉例

部性C++

全局變量與■MDstddef.h

局部變量

變量的存儲(chǔ)■define.h

分配■Agentitem.h

C++程序的

多模塊結(jié)構(gòu)■Agectltem.cpc

標(biāo)識(shí)符的作

用域

名空間

13

高級(jí)語(yǔ)言程序設(shè)計(jì)?2005春季

變量的局

標(biāo)識(shí)符的作用域

部性

全局變量與標(biāo)識(shí)符的作用域(scope)是指一個(gè)定義了的標(biāo)

局部變量

識(shí)符的有效范圍,即該標(biāo)識(shí)符所標(biāo)識(shí)的程序?qū)嶓w

變量的存儲(chǔ)

分配能被訪問(wèn)的程序段。

C++程序的標(biāo)識(shí)符的作用域一方面對(duì)定義了的標(biāo)識(shí)符的使用

多模塊結(jié)構(gòu)

進(jìn)行限制,另一方面也隱含著:作用域不相交的

標(biāo)識(shí)符的作

用域兩個(gè)標(biāo)識(shí)符可以同名。

名空間C++把標(biāo)識(shí)符的作用域分為:局部作用域、全局

作用域、文件作用域、函數(shù)作用域、函數(shù)原型作

用域、類作用域和名空間作用域。

14

高級(jí)語(yǔ)言程序設(shè)計(jì)?2005春季

變量的局

局部作用域

部性

全局變量與局部作用域(localscope)是指在函數(shù)定義或復(fù)

局部變量

合語(yǔ)句中,從標(biāo)識(shí)符的定義點(diǎn)開(kāi)始到函數(shù)定義或

變量的存儲(chǔ)

分配復(fù)合語(yǔ)句結(jié)束之間的程序段。

C++程序的C++中的局部常量名、局部變量名/對(duì)象名以及函

多模塊結(jié)構(gòu)

數(shù)的形參名具有局部作用域。

標(biāo)識(shí)符的作

1:voidf(inty)

用域

2:{y++;〃正確■y的作用域:1?8行

名空間3:x++;〃錯(cuò)誤■x的作用域:4?8行

4:intx;

5:x++;〃正確

6:doublex;〃錯(cuò)誤,w墓定義

7:chary;〃錯(cuò)誤,宜:定義■y的作用域:9~12行

8:}

9:voidg(doubley)//確■x的作用域:10T2行

10:{doublex;//正確

11:f⑴;〃正確

12:)

15

高級(jí)語(yǔ)言程序設(shè)計(jì)?2005春季

變量的局

局部作用域的嵌套

部性

全局變量與如果在一個(gè)標(biāo)識(shí)符的局部作用域中包含其他復(fù)合

局部變量

語(yǔ)句(內(nèi)層復(fù)合語(yǔ)句),并且在該內(nèi)層復(fù)合語(yǔ)句

變量的存儲(chǔ)

分配中定義了一個(gè)同名的不同實(shí)體,則外層定義的標(biāo)

C++程序的識(shí)符的作用域應(yīng)該是從其作用域中扣除內(nèi)層同名

多模塊結(jié)構(gòu)標(biāo)識(shí)符的作用域之后得到的作用域。

標(biāo)識(shí)符的作

1:voidf()

用域

2:■intx(第3行)的作用域:

名空間3:intx;?3?12行

4:x++;

5:while(!x)■doublex(第8行)的作用域:

6:?8~1。行

7:x++;

8:doublex;-內(nèi)層作用域覆蓋了外層作用域。

9:x=1.0;

10:}

11:x++;

12:}

16

高級(jí)語(yǔ)言程序設(shè)計(jì)?2005春季

變量的局

全局作用域

部性

全局變量與全局作用域(globalscope)是指構(gòu)成C++程序的

局部變量

所有源文件。

變量的存儲(chǔ)

分配全局變量名/對(duì)象名、全局常量名和全局類名的作

C++程序的用域一般具有全局作用域,它們?cè)谡麄€(gè)程序中可

多模塊結(jié)構(gòu)

用。

標(biāo)識(shí)符的作

用域#incIude<iostream>

usingnamespacestd;

名空間intp(5),q(7);//全局變量

voidf(){p++;q++;}

voidmain()

{P+二q;

f();

}

17

高級(jí)語(yǔ)言程序設(shè)計(jì)?2005春季

變量的局

全局作用域

部性

全局變量與如果在某個(gè)局部作用域中定義了與某個(gè)全局標(biāo)識(shí)

局部變量符同名的標(biāo)識(shí)符,則該全局標(biāo)識(shí)符的作用域應(yīng)扣

變量的存儲(chǔ)

分配掉與之同名的局部標(biāo)識(shí)符的作用域。

C++程序的1:intx;

多模塊結(jié)構(gòu)2:voidf()x(第1行)的作用域:

標(biāo)識(shí)符的作3:{……所有源文件

4:intx;〃局部變量x

用域

5:x++;x(第4行)的作用域:

名空間6:■■■■■■?4~7行

7:)

18

高級(jí)語(yǔ)言程序設(shè)計(jì)?2005春季

變量的局

全局作用域

部性

全局變量與■在局部標(biāo)識(shí)符的作用域中若要使用與其同名的全

局部變量局標(biāo)識(shí)符,則需要使用全局域選擇符(作用域運(yùn)

變量的存儲(chǔ)

分配算符::)對(duì)全局標(biāo)識(shí)符進(jìn)行修飾。

程序的

C++1:intx;

多模塊結(jié)構(gòu)2:voidf()

標(biāo)識(shí)符的作3:{……

4:intx;〃局部變量x

用域

5:x++;

名空間6:::x++;//全局變量X

7:)

19

高級(jí)語(yǔ)言程序設(shè)計(jì)?2005春季

變量的局

全局作用域

部性

全局變量與在使用全局標(biāo)識(shí)符時(shí),若該標(biāo)識(shí)符的定義點(diǎn)在其

局部變量他源文件中或在本源文件中使用點(diǎn)之后,則在使

變量的存儲(chǔ)

用前需要聲明它們。

分配//fiIe2.cpp

C++程序的//fi1e1.cppinty=0;

多模塊結(jié)構(gòu)intx=1;voidf(){

externinty;y++;

標(biāo)識(shí)符的作intmain0{x+=z;〃錯(cuò)誤

)

用域x+二y;

cout?z;〃錯(cuò)誤doubIez=2.0;

名空間)voidg()

{cout?z;}

通常把全局標(biāo)識(shí)符的聲明放在某個(gè).h文件中,在

需要使用這些全局標(biāo)識(shí)符的源文件中用/include

命令把聲明文件包含進(jìn)來(lái)。

20

高級(jí)語(yǔ)言程序設(shè)計(jì)?2005春季

變量的局

全局作用域

部性

全局變量與■在C++程序中,有時(shí)會(huì)出現(xiàn)下面的錯(cuò)誤:

局部變量

聲明了一個(gè)未定義的全局標(biāo)識(shí)符;

變量的存儲(chǔ)

聲明了一個(gè)存在兩個(gè)或兩個(gè)以上定義的全局標(biāo)識(shí)符;

分配

C++程序的■上述錯(cuò)誤在編譯的過(guò)程中不會(huì)發(fā)現(xiàn),在聯(lián)接的過(guò)

多模塊結(jié)構(gòu)程中會(huì)提示錯(cuò)誤:

標(biāo)識(shí)符的作

用域?unresolvedexternalsymbol:

名空間Xalreadydefinedinfile:YYY

21

高級(jí)語(yǔ)言程序設(shè)計(jì)?2005春季

變量的局

文件作用域

部性

全局變量與文件作用域(filescope)是指單獨(dú)的源文件。

局部變量

在全局標(biāo)識(shí)符的定義中加上static修飾符,則該全

變量的存儲(chǔ)

分配局標(biāo)識(shí)符就成為具有文件作用域的標(biāo)識(shí)符,它們

C++程序的只能在定義它們的源文件中使用。

多模塊結(jié)構(gòu)

在函數(shù)外用const定義的常量名具有文件作用域。

標(biāo)識(shí)符的作

用域//fiIe1.cpp

intx=1;//全局變量

名空間externinty;

voidf(){//fiIe1.cpp

x+二y;staticintx=1;//具有文件作用域的變量

)constintL=10;//具有文件作用域的常量

externinty;

staticvoidf()//具有文件作用域的函數(shù)

(

x+二y;

)

22

高級(jí)語(yǔ)言程序設(shè)計(jì)?2005春季

變量的局

文件作用域&全局作用域

部性

全局變量與一般情況下,具有全局作用域的標(biāo)識(shí)符主要用于

局部變量表示被程序各個(gè)模塊共享的程序?qū)嶓w;而具有文

變量的存儲(chǔ)

分配件作用域的標(biāo)識(shí)符用于標(biāo)識(shí)在一個(gè)模塊內(nèi)部共享

C++程序的的程序?qū)嶓w。

多模塊結(jié)構(gòu)

標(biāo)識(shí)符的作

用域

名空間

23

高級(jí)語(yǔ)言程序設(shè)計(jì)?2005春季

變量的局

函數(shù)作用域

部性

全局變量與函數(shù)作用域(functionscope)是指由整個(gè)函數(shù)定

局部變量義所構(gòu)成的程序段。

變量的存儲(chǔ)

分配語(yǔ)句標(biāo)號(hào)是唯一具有函數(shù)作用域的標(biāo)識(shí)符,可以

C++程序的在定義它們的函數(shù)體中任何地方訪問(wèn)它們。

多模塊結(jié)構(gòu)

函數(shù)作用域與局部作用域的區(qū)別:

標(biāo)識(shí)符的作

用域函數(shù)作用域包括整個(gè)函數(shù),而局部作用域是從定義點(diǎn)開(kāi)

名空間始到函數(shù)定義或復(fù)合語(yǔ)句結(jié)束;

在函數(shù)體中,一個(gè)語(yǔ)句標(biāo)號(hào)只能定義一次;

voidf(intx)

inty;?語(yǔ)句標(biāo)號(hào)的作用域可以和同名的其他標(biāo)識(shí)符的作用域重

gotox;

gotoy;疊。

x:y二x;

y:x二y;

)

24

高級(jí)語(yǔ)言程序設(shè)計(jì)?2005春季

變量的局

函數(shù)原型作用域

部性

全局變量與函數(shù)原型作用域(functionprototypescope)是指

局部變量用于函數(shù)聲明的函數(shù)原型,其中的形式參數(shù)名(

變量的存儲(chǔ)

分配如果給出)的作用域從函數(shù)原型開(kāi)始到函數(shù)原型

C++程序的結(jié)束。

多模塊結(jié)構(gòu)

標(biāo)識(shí)符的作voidf(intx,doubley)//其中x和y的作用域從“(”開(kāi)始到

用域“)”結(jié)束

名空間

25

高級(jí)語(yǔ)言程序設(shè)計(jì)?2005春季

變量的局

名空間(namespace)

部性

全局變量與對(duì)于一個(gè)多文件構(gòu)成的程序,有時(shí)會(huì)面臨一個(gè)問(wèn)

局部變量題:在一個(gè)源文件中要用到兩個(gè)分別在其他文件

變量的存儲(chǔ)

分配中定義的同名的全局實(shí)體。

C++程序的//fiIe1.cpp//fiIe2.cpp

多模塊結(jié)構(gòu)

voidf(....)voidf(....)

標(biāo)識(shí)符的作

用域

名空間)}

//main.cpp

intmain()

{f();//這里要使用fiIe1.cpp中定義的f

f();//這里要使用file2.cpp中定義的f

)

26

高級(jí)語(yǔ)言程序設(shè)計(jì)?2005春季

變量的局

名空間(namespace)

部性

全局變量與名空間是給一組程序?qū)嶓w的定義取一個(gè)名字,使

局部變量之構(gòu)成一個(gè)作用域一名空間作用域。

變量的存儲(chǔ)

分配在一個(gè)名空間中定義的全局標(biāo)識(shí)符,其作用域?yàn)?/p>

C++程序的該名空間。當(dāng)在一個(gè)名空間外部需要使用該名空

多模塊結(jié)構(gòu)

間中定義的全局標(biāo)識(shí)符時(shí),可以用該名空間的名

標(biāo)識(shí)符的作

用域字來(lái)修飾。

名空間

27

高級(jí)語(yǔ)言程序設(shè)計(jì)?2005春季

函數(shù)名空間(namespace)舉例

//fiIe1.h//fiIe1.cpp

函數(shù)的定義

namespaceA(namespaceA{

函數(shù)的調(diào)用externintx;intx=1;

voidf();voidf(){x++;}

函數(shù)的參數(shù)voidg();voidg(){f0;X-=2;}

傳遞))

//fiIe2.h//fiIe2.cpp

namespaceB{

namespaceB(

externdoubIex;doubIex=1.0;

voidf();voidf(){x+=2;}

voidg();voidg();{x-=2;}

}1

//main,cpp

intmain0

A::f0;

B::f0;

A::x=0;

28

高級(jí)語(yǔ)言程序設(shè)計(jì)?2005春季

變量的局

名空間(namespace)

部性

全局變量與using聲明

局部變量

?using〈名空間,:使用某個(gè)名空間上的程序?qū)嶓w時(shí),如果

變量的存儲(chǔ)這些程序?qū)嶓w的名與其他全局實(shí)體的名不沖突,可在使

分配

用前使用using聲明。

C++程序的

多模塊結(jié)構(gòu)也可以分別對(duì)某個(gè)名空間中的程序?qū)嶓w采用using聲明。

標(biāo)識(shí)符的作

//main,cpp

用域intmain()//main.cpp

{usingnamespaceA;intmain()

名空間{usingA::f;

f0;〃fiIe1中定義的f

B::f0;f0;〃fiIe1中定義的f

x=0;//fiIe1中定義的xB::f0;

A::x=0;//fiIe1中定義的x

}

29

高級(jí)語(yǔ)言程序設(shè)計(jì)?2005春季

變量的局

名空間(namespace)

部性

全局變量與■無(wú)名名空間

局部變量

?對(duì)于不是定義在某個(gè)名空間中的全局程序?qū)嶓w,可以把

變量的存儲(chǔ)它們看作是定義在一個(gè)全局的無(wú)名空間中。

分配

可以把文件作用域的程序?qū)嶓w定義成一個(gè)局部于各個(gè)源

C++程序的

多模塊結(jié)構(gòu)文件的無(wú)名名空間。

標(biāo)識(shí)符的作namespace{

用域intx,y;<Ostaticintx,y;

名空間

■std名空間

?C++標(biāo)準(zhǔn)庫(kù)中的程序?qū)嶓w定義在std名空間中。

30

高級(jí)語(yǔ)言程序設(shè)計(jì)?2005春季

過(guò)程抽象

-函數(shù)

§4.4

31

高級(jí)語(yǔ)言程序設(shè)計(jì)?2005春季

遞歸函數(shù)遞歸函數(shù)的定義

遞歸函數(shù)的■如果一個(gè)函數(shù)在其函數(shù)體中直接或間接地調(diào)用了自

定義己,則該函數(shù)稱為遞歸函數(shù)。直接調(diào)用自己的稱為

遞歸函數(shù)舉

例直接遞歸,間接調(diào)用自己的稱為間接遞歸。

■在定義遞歸函數(shù)時(shí),一定要對(duì)兩種情況給出描述:

?遞歸條件。遞歸條件指出何時(shí)進(jìn)行遞歸調(diào)用,屬于問(wèn)題求

解的一般情況。

?結(jié)束條件。結(jié)束條件指出何時(shí)不需遞歸,它描述了問(wèn)題求

解的特殊情況或基本情況,在該情況下不需遞歸就能得出

結(jié)果。

32

高級(jí)語(yǔ)言程序設(shè)計(jì)?2005春季

遞歸函數(shù)遞歸函數(shù)實(shí)例

遞歸函數(shù)的■例:求用單第n個(gè)fibonacci數(shù)。

定義f0(/?=1)

遞歸函數(shù)舉fib(n)=1(,7=2)

fib(n-2)+fib(n-i){n>3)

#inoIude<iostream>

usingnamespacestd;

intmain()

{intn;

cin?n;

intfib_1二0;

intfib_2=0;

for(inti=1;i<=n;i++)

{inttemp=fib_1+fib_2;

fib_1二fib_2;"

fib_2=temp;

)

cout??n<<”個(gè)斐波那契數(shù)是:"*fib_2?endl;

return0;

33

高級(jí)語(yǔ)言程序設(shè)計(jì)?2005春季

遞歸函數(shù)遞歸函數(shù)實(shí)例

遞歸函數(shù)的■例:求用單第n個(gè)fibonacci數(shù)。

定義f0(/?=1)

遞歸函數(shù)舉fib(n)=1(,7=2)

fib(n-2)+fib(n-i){n>3)

#inoIude<iostream>

usingnamespacestd;

intfib(intn)

{if(n-0)return0;〃結(jié)束條件

elseif(n=1)〃結(jié)束條件

return1;

eIse

returnfib(n-2)+fib(n-1);//遞歸條件

}

intmain()

{intn;

cin?n;

cout。"第"6n?”個(gè)斐波那契數(shù)是:“"fib(n)?endI;

return0;

}

34

高級(jí)語(yǔ)言程序設(shè)計(jì)?2005春季

遞歸函數(shù)遞歸函數(shù)實(shí)例

遞歸函數(shù)的■例:求解n!。

定義

#inoIude<iostream>

遞歸函數(shù)舉usingnamespacestd;

例intfactor(intn)

{if(n=0)return1;

returnn*factor(n-1);

}

intmain()

{intn;

cin?n;

cout?n?”的階乘是:“<<factor(n)?endI;

return0;

}

35

高級(jí)語(yǔ)言程序設(shè)計(jì)?2005春季

遞歸函數(shù)遞歸與循

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論