我正在编写一个函数,它接受一个参数'n',它将使用递归公式将十进制转换为二进制数.
这是我对非递归函数的看法,但我需要弄清楚如何递归地编写它.
def dec2bin(n):
bStr = ''
if n < 0:
return 'Must be a positive integer'
elif n == 0:
return '0'
else:
bStr += str(n%2)
return bStr
Run Code Online (Sandbox Code Playgroud)
想想你的基础案例.将答案直接写入您的程序有什么意义?0?1?可能不仅仅是那个; 你不希望一条巨型elif连锁店"好吧,如果是314,我们就可以回来'100111010'".考虑一下您需要多少个数字来对答案进行硬编码,作为递归的基础,以及哪些数字可以并且应该有算法处理.
想想你的递归电话.如果你想产生一个二进制表示n,那么什么样的调用dec2bin会得到你最多的答案,那么你可以稍微修改一下结果并返回它?好吧,如果n大于1,二进制表示n是二进制表示,n//2另一个数字卡在末尾,就像十进制表示n是十进制表示n//10的结尾另一个数字.
你的代码几乎没问题.你真的不需要维护bStr.假设你知道的二进制表示n//2,然后二进制表示的n是二进制表示n//2和0如果n是整除2或1.
喜欢n= 3.n//2= 1.dec2bin(n//2) = '01'so dec2bin(n)= '01'+'1'[因为3不能被整除2] ='011'
你的代码应该是这个.
def dec2bin(n):
if n < 0:
return 'Must be a positive integer'
elif n == 0:
return '0'
else:
return dec2bin(n//2) + str(n%2)
Run Code Online (Sandbox Code Playgroud)
就这样.
| 归档时间: |
|
| 查看次数: |
11372 次 |
| 最近记录: |