日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

递归 图 java,《算法图解》之递归

發(fā)布時間:2023/12/15 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 递归 图 java,《算法图解》之递归 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

講述遞歸,即調(diào)用函數(shù)自身的編程方法,遞歸需要的 基線條件即最簡單狀態(tài),遞歸條件即指導函數(shù)將條件引向最簡狀態(tài)。由于遞歸的特殊性,調(diào)用棧必不可少,棧為先進后出的數(shù)據(jù)結(jié)構(gòu),類似高斯消元法的“向前——向后”,我們將問題逐漸堆高簡化,再從高處解決,帶入底端,此為調(diào)用棧。

1 遞歸

假設要找一把鑰匙,而鑰匙在下面的盒子里.

使用一種方法(while循環(huán)):

另一種方法(遞歸):

2 基線條件和遞歸條件

def countdown(i):

print(i)

if i <= 0: # 基線條件

return

else: # 遞歸條件

countdown(i-1)

countdown(5)

3 棧

3.1 調(diào)用棧

def greet(name):

print('hello, ', name)

greet2(name)

print('getting ready to say bye...')

bye()

def greet2(name):

print('how are you, ', name)

def bye():

print('ok bye!')

greet('maggie')

3.2 遞歸調(diào)用棧

# 使用遞歸

def fact(x):

if x == 1:

return 1

else:

return x * fact(x-1)

print(fact(3))

# 使用循環(huán)

def fact2(x):

ans = 1

while (x > 1):

ans = ans * x

x = x - 1

return ans

print(fact2(3))

棧在遞歸中扮演著重要角色,使用棧雖然很方便,但是也要付出代價:存儲詳盡的信息可能戰(zhàn)勝大量的內(nèi)存.每個函數(shù)調(diào)用都要戰(zhàn)勝一定的內(nèi)存,如果棧很高,就意味著計算機存儲了大量函數(shù)調(diào)用的信息.在這種情況下,有兩種選擇:

使用循環(huán)

使用尾遞歸

4 小結(jié)

遞歸指的是調(diào)用自己的函數(shù)

每個遞歸函數(shù)都有兩個條件:基線條件和遞歸條件

棧有兩種操作:壓入和彈出

所有函數(shù)調(diào)用都進入調(diào)用棧

調(diào)用??赡芎荛L,這將占用大量的內(nèi)存

總結(jié)

以上是生活随笔為你收集整理的递归 图 java,《算法图解》之递归的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。