在前面的文章中,我們說到了可以使用循環(huán)語句來替代遞歸。但是,有時候必須使用遞歸,或者說使用遞歸才是更方便的解決方案。
考慮像下面這樣的一個任務(wù):計算一個嵌套的子列表結(jié)構(gòu)中所有數(shù)字的總和:
[1,[2,[3,4],5],6,[7,8]] # Arbitrarily nested sublists
簡單的循環(huán)語句在這里不起作用,因為這不是一個線性迭代。嵌套的循環(huán)語句也不夠用,因為子列表可能嵌套到任意的深度并且以任意的形式嵌套。相反,下面的代碼使用遞歸來對應(yīng)這種一般性的嵌套,可以順序地訪問子列表:
def sumtree(L):
tot = 0
for x in L:                                # For each item at this level
    if not isinstance(x,list):
        tot += x                           # Add numbers directly
    else:
        tot += sumtree(x)                  # Recur for sublists
return tot
L = [1,[2,[3,4],5],6,[7,8]] # Arbitrary nesting
print(sumtree(L)) # Prints 36
Pathological cases
print(sumtree([1,[2,[3,[4,[5]]]]])) # Prints 15 (right-heavy)
print(sumtree([[[[[1],2],3],4],5])) # Prints 15 (left-heavy)
盡管出于簡單性和高效率的目的,對于線性迭代通常應(yīng)該使用循環(huán)語句而不是遞歸,但我們會發(fā)現(xiàn)像上面示例一樣的必須使用遞歸的情況還是很多的。
- 
                                編程
                                +關(guān)注關(guān)注 89文章 3704瀏覽量 96480
- 
                                遞歸
                                +關(guān)注關(guān)注 0文章 29瀏覽量 9259
- 
                                python
                                +關(guān)注關(guān)注 56文章 4849瀏覽量 89279
發(fā)布評論請先 登錄
stlinkv3mini在cubeprog檢測不到是什么情況?
labview中遞歸使用你嘗試過嗎?
快速掌握Python的遞歸函數(shù)與匿名函數(shù)調(diào)用
請問ucos中運行態(tài)和就緒態(tài)是在什么情況下轉(zhuǎn)化的?
LabVIEW中使用遞歸算法
什么情況下選用工業(yè)主板
 
    
 
           
        
 
         在Python中什么情況必須使用遞歸
在Python中什么情況必須使用遞歸 
                 
  
            
             
             
                 
             工商網(wǎng)監(jiān)
工商網(wǎng)監(jiān)
        
評論