我有一個獲取數字的函式,應該回傳最小數字。這是我試圖做的,但也許我沒有完全理解遞回是如何作業的。
def min_dig(num):
minimum = 9
if num < 10:
return num
min_dig(num / 10)
if num % 10 < minimum:
minimum = num % 10
return minimum
print(min_dig(98918))
輸出是 8,但應該是 1。
uj5u.com熱心網友回復:
我認為遞回試圖做的是這樣的:
def min_dig(num):
if num < 10:
return num
return min(num % 10, min_dig(num // 10))
print(min_dig(98918))
如果數字小于 10,那么它的最小數字就是它自己。如果數字大于 10,我們只比較它的最后一位和除最后一位之外的所有數字組成的數字的最小位,并回傳較小的一位。
uj5u.com熱心網友回復:
我已經以一種有效的方式修改了你的函式,我認為它更容易理解。
def min_dig(number):
if number < 10:
return number
else:
return min(number % 10, min_dig(number // 10))
這也使用遞回,我只是將其作為回傳。在這里,您基本上進行比較(number % 10),(min_dig(number // 10)然后回傳最低值。通過這種方式,您可以比較號碼中的所有數字。希望這可以幫助。
uj5u.com熱心網友回復:
讓我們先從現在的邏輯中思考這個問題;
你得到一個數字,你把這個數字分成一個數字陣列,你遍歷那個陣列并將第一個數字存盤在一個變數中,對于陣列的所有下一次迭代,你將陣列中的索引與存盤的索引進行比較在變數中,如果它更小,你用新的數字覆寫變數,如果不是,繼續,回傳變數中的數字
這是一些應該可以幫助您的偽代碼,您可以自己將其轉換為python
number = 98918
numberArray = number.split
smallest = numberArray[0]
for (digit in numberArray){
if (digit < smallest){
smallest = digit
}
}
print(smallest)
uj5u.com熱心網友回復:
您已將 minimum 作為區域變數,因此每次它都會將值分配為 9。嘗試將其設為全域變數。
minimum = 9
def min_dig(num):
global minimum
if num < 10:
return num
min_dig(num // 10)
if num % 10 < minimum:
minimum = num % 10
return minimum
print(min_dig(98918))
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/532413.html
標籤:Python递归
上一篇:如何在遞回函式中使用元組?
