python遞歸算法 遞歸與回溯發(fā)的區(qū)別是什么?
]遞歸是一種算法結(jié)構(gòu)。回溯是一種算法思想]遞歸是調(diào)用函數(shù)本身來(lái)解決函數(shù)中的問(wèn)題]回溯是通過(guò)不同的嘗試來(lái)生成問(wèn)題的解決方案,有點(diǎn)像窮盡。然而,與糟糕的情況不同,回溯將被刪減,這意味著不必知道已知錯(cuò)誤的結(jié)
]遞歸是一種算法結(jié)構(gòu)?;厮菔且环N算法思想]遞歸是調(diào)用函數(shù)本身來(lái)解決函數(shù)中的問(wèn)題]回溯是通過(guò)不同的嘗試來(lái)生成問(wèn)題的解決方案,有點(diǎn)像窮盡。然而,與糟糕的情況不同,回溯將被刪減,這意味著不必知道已知錯(cuò)誤的結(jié)果。枚舉下一個(gè)答案,比如一個(gè)1,2,3,4,5的有序序列,我想找到所有和為5的集合。當(dāng)我從上一次搜索中選擇1,然后選擇2,然后選擇3時(shí),我發(fā)現(xiàn)總和大于預(yù)期值,那么4,5將不起作用。這是對(duì)搜索過(guò)程的優(yōu)化。
遞歸與回溯發(fā)的區(qū)別是什么?
遞歸的主要思想是能夠重復(fù)一些操作,例如簡(jiǎn)單階乘、冪、回溯中的八皇后、數(shù)獨(dú)、河內(nèi)塔、分形。
由于堆棧機(jī)制,一般遞歸可以保持一些變量處于歷史狀態(tài),例如返回x*Power。。。您提到過(guò),但是有些問(wèn)題可能很大或太深,需要盡可能避免遞歸,因?yàn)槎褩?赡軙?huì)溢出。另一個(gè)
問(wèn)題是Python不支持尾部遞歸優(yōu)化
所以盡量避免遞歸。
Def power(x,n)
如果n< 0:
return 1
return x*power(x,n-1)
power(3,3)
3*power(3,2)
3*(3*power(3,1))
3*(3*power(3,0))
3*(3*1)),其中n=0,return 1
3*(3*3)
3*9
當(dāng)函數(shù)參數(shù)n=0時(shí),開(kāi)始撤退到第一次通電結(jié)束。
關(guān)于python遞歸函數(shù)怎樣理解?
我的理解是貪婪算法一般指的是優(yōu)化問(wèn)題,比如尋找問(wèn)題的最優(yōu)解。在求解問(wèn)題的過(guò)程中,只找到最優(yōu)解,最終可能得不到實(shí)際的最優(yōu)解,而只能得到近似解。
您的問(wèn)題是一個(gè)搜索問(wèn)題,而不是優(yōu)化問(wèn)題,因此我認(rèn)為稱(chēng)之為貪婪算法沒(méi)有意義。我不知道是否有任何回溯(雖然似乎有可能),因?yàn)槲也幻靼啄闼枋龅倪^(guò)程(=@@@=)