我是 Python 新手,正在嘗試撰寫一個二進制到十進制轉換的函式,如下所示
def decimaltobinary(n):
if n > 1:
decimaltobinary(n//2)
print(n%2,end='')
#return n%2
decimaltobinary(4)
這作業得很好。現在的問題是當我如下修改它時,它沒有給我正確的結果 -
def decimaltobinary(n):
if n > 1:
decimaltobinary(n//2)
#print(n%2,end='')
return n%2
a=decimaltobinary(4)
print(a)
我是否遺漏了退貨宣告?任何指標都會非常有幫助。
uj5u.com熱心網友回復:
您需要小心您的退貨宣告。嘗試這個:
def decimaltobinary(n):
def _dtb(n, lst):
if n <= 0:
return lst
lst.append(n&1)
return _dtb(n>>1, lst)
return ''.join(map(str, reversed(_dtb(n, list()))))
print(decimaltobinary(19))
輸出:
10011
uj5u.com熱心網友回復:
在第二個示例中,來自decimaltobinaryin的回傳值if被完全忽略。
您需要做的是將回傳的值分配給一個變數,然后將其與n%2.
嘗試這個:
def decimaltobinary(n):
x = ''
if n > 1:
x = decimaltobinary(n//2)
#print(n%2,end='')
return str(x) '' str(n%2)
a=decimaltobinary(4)
print(a)
uj5u.com熱心網友回復:
在第一個示例中,您將在遞回方法的每次迭代中列印。在第二個示例中,您正在破壞return陳述句。
你可以在這里看到:
def decimaltobinary(n):
if n > 1:
print('Making recursion for (n): ', n)
decimaltobinary(n//2)
print('Return for (n): ', n, ', result: ', n%2)
return n%2
a=decimaltobinary(4)
print(a)
輸出:
Making recursion for (n): 4
Making recursion for (n): 2
Return for (n): 1 , result: 1
Return for (n): 2 , result: 0
Return for (n): 4 , result: 0
0
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/532419.html
標籤:Python递归
下一篇:不能在反應組件中使用遞回映射
