内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

python3函數(shù)訓(xùn)練 python3函數(shù)手冊(cè)

Python3:怎么通過(guò)遞歸函數(shù)

函數(shù)的遞歸調(diào)用

公司主營(yíng)業(yè)務(wù):成都網(wǎng)站建設(shè)、成都網(wǎng)站制作、移動(dòng)網(wǎng)站開(kāi)發(fā)等業(yè)務(wù)。幫助企業(yè)客戶(hù)真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競(jìng)爭(zhēng)能力。創(chuàng)新互聯(lián)公司是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開(kāi)放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來(lái)的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶(hù)帶來(lái)驚喜。創(chuàng)新互聯(lián)公司推出贊皇免費(fèi)做網(wǎng)站回饋大家。

遞歸問(wèn)題是一個(gè)說(shuō)簡(jiǎn)單也簡(jiǎn)單,說(shuō)難也有點(diǎn)難理解的問(wèn)題.我想非常有必要對(duì)其做一個(gè)總結(jié).

首先理解一下遞歸的定義,遞歸就是直接或間接的調(diào)用自身.而至于什么時(shí)候要用到遞歸,遞歸和非遞歸又有那些區(qū)別?又是一個(gè)不太容易掌握的問(wèn)題,更難的是對(duì)于遞歸調(diào)用的理解.下面我們就從程序+圖形的角度對(duì)遞歸做一個(gè)全面的闡述.

我們從常見(jiàn)到的遞歸問(wèn)題開(kāi)始:

1 階層函數(shù)

#include iostream

using namespace std;

int factorial(int n)

{

if (n == 0)

{

return 1;

}

else

{

int result = factorial(n-1);

return n * result;

}

}

int main()

{

int x = factorial(3);

cout x endl;

return 0;

}

這是一個(gè)遞歸求階層函數(shù)的實(shí)現(xiàn)。很多朋友只是知道該這么實(shí)現(xiàn)的,也清楚它是通過(guò)不斷的遞歸調(diào)用求出的結(jié)果.但他們有些不清楚中間發(fā)生了些什么.下面我們用圖對(duì)此做一個(gè)清楚的流程:

根據(jù)上面這個(gè)圖,大家可以很清楚的看出來(lái)這個(gè)函數(shù)的執(zhí)行流程。我們的階層函數(shù)factorial被調(diào)用了4次.并且我們可以看出在調(diào)用后面的調(diào)用中,前面的調(diào)用并不退出。他們同時(shí)存在內(nèi)存中??梢?jiàn)這是一件很浪費(fèi)資源的事情。我們?cè)摯蔚膮?shù)是3.如果我們傳遞10000呢。那結(jié)果就可想而知了.肯定是溢出了.就用int型來(lái)接收結(jié)果別說(shuō)10000,100就會(huì)產(chǎn)生溢出.即使不溢出我想那肯定也是見(jiàn)很浪費(fèi)資源的事情.我們可以做一個(gè)粗略的估計(jì):每次函數(shù)調(diào)用就單變量所需的內(nèi)存為:兩個(gè)int型變量.n和result.在32位機(jī)器上占8B.那么10000就需要10001次函數(shù)調(diào)用.共需10001*8/1024 = 78KB.這只是變量所需的內(nèi)存空間.其它的函數(shù)調(diào)用時(shí)函數(shù)入口地址等仍也需要占用內(nèi)存空間??梢?jiàn)遞歸調(diào)用產(chǎn)生了一個(gè)不小的開(kāi)銷(xiāo).

2 斐波那契數(shù)列

int Fib(int n)

{

if (n = 1)

{

return n;

}

else

{

return Fib(n-1) + Fib(n-2);

}

}

這個(gè)函數(shù)遞歸與上面的那個(gè)有些不同.每次調(diào)用函數(shù)都會(huì)引起另外兩次的調(diào)用.最后將結(jié)果逐級(jí)返回.

我們可以看出這個(gè)遞歸函數(shù)同樣在調(diào)用后買(mǎi)的函數(shù)時(shí),前面的不退出而是在等待后面的結(jié)果,最后求出總結(jié)果。這就是遞歸.

3

#include iostream

using namespace std;

void recursiveFunction1(int num)

{

if (num 5)

{

cout num endl;

recursiveFunction1(num+1);

}

}

void recursiveFunction2(int num)

{

if (num 5)

{

recursiveFunction2(num+1);

cout num endl;

}

}

int main()

{

recursiveFunction1(0);

recursiveFunction2(0);

return 0;

}

運(yùn)行結(jié)果:

1

2

3

4

4

3

2

1

該程序中有兩個(gè)遞歸函數(shù)。傳遞同樣的參數(shù),但他們的輸出結(jié)果剛好相反。理解這兩個(gè)函數(shù)的調(diào)用過(guò)程可以很好的幫助我們理解遞歸:

我想能夠把上面三個(gè)函數(shù)的遞歸調(diào)用過(guò)程理解了,你已經(jīng)把遞歸調(diào)用理解的差不多了.并且從上面的遞歸調(diào)用中我們可以總結(jié)出遞歸的一個(gè)規(guī)律:他是逐級(jí)的調(diào)用,而在函數(shù)結(jié)束的時(shí)候是從最后面往前反序的結(jié)束.這種方式是很占用資源,也很費(fèi)時(shí)的。但是有的時(shí)候使用遞歸寫(xiě)出來(lái)的程序很容易理解,很易讀.

為什么使用遞歸:

1 有時(shí)候使用遞歸寫(xiě)出來(lái)的程序很容易理解,很易讀.

2 有些問(wèn)題只有遞歸能夠解決.非遞歸的方法無(wú)法實(shí)現(xiàn).如:漢諾塔.

遞歸的條件:

并不是說(shuō)所有的問(wèn)題都可以使用遞歸解決,他必須的滿(mǎn)足一定的條件。即有一個(gè)出口點(diǎn).也就是說(shuō)當(dāng)滿(mǎn)足一定條件時(shí),程序可以結(jié)束,從而完成遞歸調(diào)用,否則就陷入了無(wú)限的遞歸調(diào)用之中了.并且這個(gè)條件還要是可達(dá)到的.

遞歸有哪些優(yōu)點(diǎn):

易讀,容易理解,代碼一般比較短.

遞歸有哪些缺點(diǎn):

占用內(nèi)存資源多,費(fèi)時(shí),效率低下.

因此在我們寫(xiě)程序的時(shí)候不要輕易的使用遞歸,雖然他有他的優(yōu)點(diǎn),但是我們要在易讀性和空間,效率上多做權(quán)衡.一般情況下我們還是使用非遞歸的方法解決問(wèn)題.若一個(gè)算法非遞歸解法非常難于理解。我們使用遞歸也未嘗不可.如:二叉樹(shù)的遍歷算法.非遞歸的算法很難與理解.而相比遞歸算法就容易理解很多.

對(duì)于遞歸調(diào)用的問(wèn)題,我們?cè)谇耙欢螘r(shí)間寫(xiě)圖形學(xué)程序時(shí),其中有一個(gè)四連同填充算法就是使用遞歸的方法。結(jié)果當(dāng)要填充的圖形稍微大一些時(shí),程序就自動(dòng)關(guān)閉了.這不是一個(gè)人的問(wèn)題,所有人寫(xiě)出來(lái)的都是這個(gè)問(wèn)題.當(dāng)時(shí)我們給與的解釋就是堆棧溢出。就多次遞歸調(diào)用占用太多的內(nèi)存資源致使堆棧溢出,程序沒(méi)有內(nèi)存資源執(zhí)行下去,從而被操作系統(tǒng)強(qiáng)制關(guān)閉了.這是一個(gè)真真切切的例子。所以我們?cè)谑褂眠f歸的時(shí)候需要權(quán)衡再三.

「Python3基礎(chǔ)」函數(shù)

表示一個(gè)功能,函數(shù)定義著是提供功能的人,函數(shù)調(diào)用者是使用功能的人。

print:打印功能,將括號(hào)中的內(nèi)容,顯示到終端。

將括號(hào)中的內(nèi)容顯示在控制臺(tái).

input:輸入功能,從終端中獲取輸入的信息,存到程序變量當(dāng)中

作用:將用戶(hù)輸入的內(nèi)容賦值給變量

第一個(gè)字符必須是字母表中字母或下劃線(xiàn) _ 。

標(biāo)識(shí)符的其他的部分由字母、數(shù)字和下劃線(xiàn)組成。

標(biāo)識(shí)符對(duì)大小寫(xiě)敏感。

python最具特色的就是使用縮進(jìn)來(lái)表示代碼塊,不需要使用大括號(hào) {} 。

縮進(jìn)的空格數(shù)是可變的,但是同一個(gè)代碼塊的語(yǔ)句必須包含相同的縮進(jìn)空格數(shù)。實(shí)例如下:

python3入門(mén)之幾個(gè)函數(shù)變化

使用print時(shí),也可以在語(yǔ)句中添加多個(gè)表達(dá)式,每個(gè)表達(dá)式用逗 號(hào)分隔;在用逗號(hào)分隔輸出時(shí),print語(yǔ)句會(huì)在每個(gè)輸出項(xiàng)后面自動(dòng)添加一 個(gè)空格;

注意:不管時(shí)字符串還是其他類(lèi)型都是轉(zhuǎn)化為字符串進(jìn)行打??!

python3 定義函數(shù)

Python 有很多有用的內(nèi)置函數(shù), 但還是不能滿(mǎn)足程序員的需求, 所以需要 自定義函數(shù) 。

如何編寫(xiě) 自定義函數(shù) , 需要用到 def語(yǔ)句, 函數(shù)名, 括號(hào)及參數(shù), 冒號(hào), 函數(shù)說(shuō)明,內(nèi)置縮進(jìn)編碼模塊,return 語(yǔ)句 , 其中有一些也可省略不寫(xiě),后面會(huì)慢慢介紹。

編寫(xiě)函數(shù)不可或缺的元素, 一定都要寫(xiě)。函數(shù)名盡量寫(xiě)得簡(jiǎn)單易懂。

一般是對(duì)函數(shù)的描述說(shuō)明。

這是編寫(xiě)具體的 操作命令 的地方, 如果還未想好如何編寫(xiě), 可以使用 pass 來(lái)占位,讓程序可以運(yùn)行起來(lái),防止調(diào)試出錯(cuò)。

參數(shù)放在最后講, 是因?yàn)檫@里面的東西還是很多的。首先看個(gè)例子。

如上的案例都是限制了參數(shù)個(gè)數(shù)的, 最多傳三個(gè)參數(shù) name/age/city , 但是如果有一些特例,需要傳多個(gè)參數(shù)怎么辦呢。 參數(shù)前面加個(gè) * , 變成 可變參數(shù) 。

那如果想要傳多個(gè)包含名稱(chēng)的參數(shù),例如a=1,b=2,c=3......,那該怎么寫(xiě)呢。參數(shù)前面加個(gè) ** , 變成 關(guān)鍵字參數(shù) 。

python3--內(nèi)置函數(shù)

python的常用內(nèi)置函數(shù)

1.abs() 函數(shù)返回?cái)?shù)字的絕對(duì)值

abs(-40)=40

2. dict() 函數(shù)用于創(chuàng)建一個(gè)字典

dict()

{} ? ? ?#創(chuàng)建一個(gè)空字典類(lèi)似于u={},字典的存取方式一般為key-value

例如u = {"username":"tom", ?"age":18}

3. help() 函數(shù)用于查看函數(shù)或模塊用途的詳細(xì)說(shuō)明

help('math')查看math模塊的用處

a=[1,2,3,4]

help(a)查看列表list幫助信息

4.dir()獲得當(dāng)前模塊的屬性列表

dir(help)

['__call__', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__']

5.min() 方法返回給定參數(shù)的最小值 /參數(shù)可以為序列

a=? min(10,20,30,40)

a

10

6. next() 返回迭代器的下一個(gè)項(xiàng)目

it = iter([1, 2, 3, 4, 5])

next(it)

1

next(it)

2

7. id() 函數(shù)用于獲取對(duì)象的內(nèi)存地址

a=12

id(a)

1550569552

8.enumerate() 函數(shù)用于將一個(gè)可遍歷的數(shù)據(jù)對(duì)象(如列表、元組或字符串)組合為一個(gè)索引序列,同時(shí)列出數(shù)據(jù)和數(shù)據(jù)下標(biāo),一般用在 for 循環(huán)當(dāng)中。

a=["tom","marry","leblan"]

list(enumerate(a))

[(0, 'tom'), (1, 'marry'), (2, 'leblan')]

9. oct() 函數(shù)將一個(gè)整數(shù)轉(zhuǎn)換成8進(jìn)制字符串

oct(15)

'0o17'

oct(10)

'0o12'

10. bin() 返回一個(gè)整數(shù) int 或者長(zhǎng)整數(shù) long int 的二進(jìn)制表示

bin(10)

'0b1010'

bin(15)

'0b1111'

11.eval() 函數(shù)用來(lái)執(zhí)行一個(gè)字符串表達(dá)式,并返回表達(dá)式的值

eval('2+2')

4

12.int() 函數(shù)用于將一個(gè)字符串會(huì)數(shù)字轉(zhuǎn)換為整型

int(3)

3

int(3.6)

3

int(3.9)

3

int(4.0)

4

13.open() 函數(shù)用于打開(kāi)一個(gè)文件,創(chuàng)建一個(gè)file對(duì)象,相關(guān)的方法才可以調(diào)用它進(jìn)行讀寫(xiě)

f=open('test.txt')

14.str() 函數(shù)將對(duì)象轉(zhuǎn)化為適于人閱讀的形式

str(3)

'3'

15. bool() 函數(shù)用于將給定參數(shù)轉(zhuǎn)換為布爾類(lèi)型,如果沒(méi)有參數(shù),返回 False

bool()

False

bool(1)

True

bool(10)

True

bool(10.0)

True

16.isinstance() 函數(shù)來(lái)判斷一個(gè)對(duì)象是否是一個(gè)已知的類(lèi)型

a=5

isinstance(a,int)

True

isinstance(a,str)

False

17. sum() 方法對(duì)系列進(jìn)行求和計(jì)算

sum([1,2,3],5)

11

sum([1,2,3])

6

18. super() 函數(shù)用于調(diào)用下一個(gè)父類(lèi)(超類(lèi))并返回該父類(lèi)實(shí)例的方法。super 是用來(lái)解決多重繼承問(wèn)題的,直接用類(lèi)名調(diào)用父類(lèi)方法

class ? User(object):

? def__init__(self):

class Persons(User):

? ? ? ? super(Persons,self).__init__()

19. float() 函數(shù)用于將整數(shù)和字符串轉(zhuǎn)換成浮點(diǎn)數(shù)

float(1)

1.0

float(10)

10.0

20. iter() 函數(shù)用來(lái)生成迭代器

a=[1,2,3,4,5,6]

iter(a)

for i in iter(a):

... ? ? ? ? print(i)

...

1

2

3

4

5

6

21.tuple 函數(shù)將列表轉(zhuǎn)換為元組

a=[1,2,3,4,5,6]

tuple(a)

(1, 2, 3, 4, 5, 6)

22.len() 方法返回對(duì)象(字符、列表、元組等)長(zhǎng)度或項(xiàng)目個(gè)數(shù)

s = "playbasketball"

len(s)

14

a=[1,2,3,4,5,6]

len(a)

6

23. property() 函數(shù)的作用是在新式類(lèi)中返回屬性值

class User(object):

?def __init__(self,name):

? ? ? ? ? self.name = name

def get_name(self):

? ? ? ? ? return self.get_name

@property

?def name(self):

? ? ? ? ?return self_name

24.type() 函數(shù)返回對(duì)象的類(lèi)型

25.list() 方法用于將元組轉(zhuǎn)換為列表

b=(1,2,3,4,5,6)

list(b)

[1, 2, 3, 4, 5, 6]

26.range() 函數(shù)可創(chuàng)建一個(gè)整數(shù)列表,一般用在 for 循環(huán)中

range(10)

range(0, 10)

range(10,20)

range(10, 20)

27. getattr() 函數(shù)用于返回一個(gè)對(duì)象屬性值

class w(object):

... ? ? ? ? ? ? s=5

...

a = w()

getattr(a,'s')

5

28. complex() 函數(shù)用于創(chuàng)建一個(gè)復(fù)數(shù)或者轉(zhuǎn)化一個(gè)字符串或數(shù)為復(fù)數(shù)。如果第一個(gè)參數(shù)為字符串,則不需要指定第二個(gè)參數(shù)

complex(1,2)

(1+2j)

complex(1)

(1+0j)

complex("1")

(1+0j)

29.max() 方法返回給定參數(shù)的最大值,參數(shù)可以為序列

b=(1,2,3,4,5,6)

max(b)

6

30. round() 方法返回浮點(diǎn)數(shù)x的四舍五入值

round(10.56)

11

round(10.45)

10

round(10.45,1)

10.4

round(10.56,1)

10.6

round(10.565,2)

10.56

31. delattr 函數(shù)用于刪除屬性

class Num(object):

...? ? a=1

...? ? b=2

...? ? c=3.

.. print1 = Num()

print('a=',print1.a)

a= 1

print('b=',print1.b)

b= 2

print('c=',print1.c)

c= 3

delattr(Num,'b')

print('b=',print1.b)

Traceback (most recent call last):? File "", line 1, inAttributeError: 'Num' object has no attribute 'b'

32. hash() 用于獲取取一個(gè)對(duì)象(字符串或者數(shù)值等)的哈希值

hash(2)

2

hash("tom")

-1675102375494872622

33. set() 函數(shù)創(chuàng)建一個(gè)無(wú)序不重復(fù)元素集,可進(jìn)行關(guān)系測(cè)試,刪除重復(fù)數(shù)據(jù),還可以計(jì)算交集、差集、并集等。

a= set("tom")

b = set("marrt")

a,b

({'t', 'm', 'o'}, {'m', 't', 'a', 'r'})

ab#交集

{'t', 'm'}

a|b#并集

{'t', 'm', 'r', 'o', 'a'}

a-b#差集

{'o'}

名稱(chēng)欄目:python3函數(shù)訓(xùn)練 python3函數(shù)手冊(cè)
標(biāo)題URL:http://m.rwnh.cn/article24/doopcce.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供自適應(yīng)網(wǎng)站、品牌網(wǎng)站制作、網(wǎng)站建設(shè)商城網(wǎng)站、電子商務(wù)、軟件開(kāi)發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

網(wǎng)站建設(shè)網(wǎng)站維護(hù)公司
武强县| 正阳县| 永昌县| 佛坪县| 沙雅县| 吉林市| 大兴区| 琼中| 太保市| 新闻| 独山县| 肥城市| 普定县| 河源市| 宣恩县| 淳化县| 洛浦县| 西盟| 从江县| 师宗县| 石林| 马龙县| 凤翔县| 乌拉特后旗| 华安县| 光山县| 格尔木市| 巴林右旗| 读书| 盐山县| 九龙城区| 东台市| 曲阜市| 宁波市| 隆化县| 佛山市| 平南县| 肥城市| 通海县| 德清县| 邢台县|