亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Python遞歸和返回

Python遞歸和返回

Helenr 2022-01-18 21:10:52
我是遞歸概念的新手,在我的編碼經驗中從未練習過這種魔法。我對 Python 遞歸感到非常困惑的是“return”的使用。更具體地說,我不太明白在某些情況下何時使用 return。我見過在遞歸之前使用 return 的情況,并且根本不需要 case return。例如:一個 Leetcode 問題:“給定二叉搜索樹(BST)的根節點和一個值。您需要在 BST 中找到該節點的值等于給定值的節點。返回以該節點為根的子樹。如果這樣的節點不存在,你應該返回NULL?!? Definition for a binary tree node.# class TreeNode(object):#     def __init__(self, x):#         self.val = x#         self.left = None#         self.right = Noneclass Solution(object):    def searchBST(self, root, val):        """        :type root: TreeNode        :type val: int        :rtype: TreeNode        """        if root == None:            return root        if root.val == val:            return root        elif root.val > val:           return self.searchBST(root.left,val)        else:           return self.searchBST(root.right,val)為什么我需要返回“self.searchBST(root.left,val)”和“self.searchBST(root.right,val)”?如果這兩行都沒有加return,程序是不是還要遞歸運行,直到滿足root.val == val或者root== None的條件,并返回一個值?(我知道在實踐中并非如此,我只是想將其概念化)。此外,有人可以向我展示在遞歸中使用 return 的一般準則嗎?先感謝您!
查看完整描述

3 回答

?
三國紛爭

TA貢獻1804條經驗 獲得超7個贊

如果你只寫:

self.searchBST(root.left,val)

代替

return self.searchBST(root.left,val)

它將執行遞歸搜索,但不會將結果返回到調用它的塊。當它達到您想要的值(或找不到)時,該調用將執行

return root

但是之前的調用只會丟棄這個值,而不是把它返回到遞歸鏈中。


查看完整回答
反對 回復 2022-01-18
?
慕無忌1623718

TA貢獻1744條經驗 獲得超4個贊

讓我們舉一個更簡單的例子,您也可以將相同的邏輯應用于您的方法,


def fact(n):

    #Base case

    if n in [0, 1]:

        return 1


    #Recursion. Eg: when n is 2, this would eventually become 2 * 1 and would be returning 2 to the caller

    return n * fact(n-1)

一般來說,遞歸函數有兩種情況,一種是基本情況,另一種是對自身的遞歸調用。請記住,這是一個函數,理想情況下應該向調用者返回一些東西。這就是return需要聲明的地方。否則,您將不會向調用者返回正確的值。


如果這兩行都沒有加return,程序是不是還要遞歸運行,直到滿足root.val == val或者root== None的條件,并返回一個值


返回值是。但它會返回到之前的調用(等等),因此它會返回到self.searchBST(root.left,val)or之一self.searchBST(root.right,val)。您仍然需要從該點返回到函數的調用者。因此,您需要擁有return self.searchBST(root.left,val)or return self.searchBST(root.right,val)。


查看完整回答
反對 回復 2022-01-18
?
慕尼黑5688855

TA貢獻1848條經驗 獲得超2個贊

語句退出當前正在運行的return函數并返回一個返回值,然后可以像 Python 中的任何其他值一樣使用該值:分配給變量,作為參數傳遞給另一個函數,或者...作為調用的返回值返回功能。


def some_func():

    return 'result'


x = some_func()  # after this, x == 'result'

如果你在沒有捕獲返回值的情況下調用一個函數,它就會丟失。因此,如果您只調用some_func(),它將被執行。


some_func()  # this works, but 'result' is lost

調用另一個函數的函數也是如此,即使那個函數本身就是:


def some_other_func1():

    x = some_func()

    return x


def some_other_func2():

    return some_func()  # exact same result as some_other_func1()


def some_recursive_func(n):

    if n == 0:

        print('Reached the end')

        return n

    else:

        print(f'At {n}, going down')

        return some_recursive_func(n-1)


print(some_recursive_func(3))  # prints a bunch of lines, but always prints `0` at the  end


查看完整回答
反對 回復 2022-01-18
  • 3 回答
  • 0 關注
  • 274 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號