题目:


除二取余方法的递归定义,如下:

  其中,⋈ 表示拼接。
  公式的意思是:如果十进制正整数 d 等于 1,那它对应的二进制 b 就是 1;否则 d 大于 1,那它的二进制就是 d 整除 2 的商对应的二进制,拼接 d 整除 2 的余数。


问题描述:


########## Begin ##########
def f(d):
    if d==1:
        return 1
    else:
        return (str(f(d//2)+str(d%2)))
########## End ##########
d = int(input())
print(f(d))

做的时候想要一步到位,运行后好像语法显示错误。

Traceback (most recent call last):
  File "src/step6/student6.py", line 9, in <module>
    print(f(d))
  File "src/step6/student6.py", line 6, in f
    return (str(f(d//2)+str(d%2)))
  File "src/step6/student6.py", line 6, in f
    return (str(f(d//2)+str(d%2)))
  File "src/step6/student6.py", line 6, in f
    return (str(f(d//2)+str(d%2)))
  [Previous line repeated 1 more times]
TypeError: unsupported operand type(s) for +: 'int' and 'str'

仔细检查发现括号缺了一个。应该修改为:

########## Begin ##########
def f(d):
    if d==1:
        return 1
    else:
        return(str(f(d//2))+str(d%2))
########## End ##########
d = int(input())
print(f(d))

在平时,可以考虑分步走,纠错会容易一点。 

########## Begin ##########
def f(d):
    if d==1:
        return 1
    else:
        s1=str(f(d//2))
        s2=str(d%2)
        s=s1+s2
        return s
########## End ##########
d = int(input())
print(f(d))

总结:


拼接的时候要注意将其转换为字符串