3 回答

TA貢獻1804條經驗 獲得超7個贊
如果你只寫:
self.searchBST(root.left,val)
代替
return self.searchBST(root.left,val)
它將執行遞歸搜索,但不會將結果返回到調用它的塊。當它達到您想要的值(或找不到)時,該調用將執行
return root
但是之前的調用只會丟棄這個值,而不是把它返回到遞歸鏈中。

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)。

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
添加回答
舉報