Python 递归函数:接收偶数 n,返回使最终值等于 n 的奇数乘以 2 的结果
写一个叫做printTwos(n)的函数,这个函数接收一个数字作为参数,然后返回一个字符串。这个字符串的内容是一个奇数乘以2,最终的结果要等于n。字符串的两边要有相等数量的2,额外的2要放在字符串的最前面。注意:这个奇数的值可以是1。
这是我写的代码:
def printTwos(n):
x = n//2
if n <= 0:
return 'invalid'
elif n==1:
return '1'
elif x % 2 !=0:
return '2 * %d' % x
elif n % 5 == 0:
return "%s * 2" % printTwos(n/2)
else:
return "2 * %s * 2" % printTwos((n/2)/2)
示例结果:
>>> printTwos(32)
'2 * 2 * 2 * 1 * 2 * 2'
(在我的函数中,这个是成功的)
>>> printTwos(80)
'2 * 2 * 5 * 2 * 2'
(我得到的结果是:'2 * 5 * 2 * 2 * 2'
)
如果有任何建议可以帮我修正这个问题,我会很感激,谢谢。
2 个回答
0
提示:使用下面的框架:
if n % 4 == 0:
#…
elif n % 2 == 0:
#…
else:
#…
1
首先检查数字 n 是否能被 4 整除,如果不能,再检查它是否能被 2 整除。这样你就可以在你的字符串开头加上 2。
def printTwos(n):
if n % 4 != 0:
if n % 2 == 0:
# n is divisible by 2 so add two at the beginning of string
result = printTwos(n/2)
return "2 * " + result
else:
# n is odd so return it as string
return str(n)
else:
result = printTwos(n/4)
return "2 * %s * 2" % result
print printTwos(4)
print printTwos(8)
print printTwos(32)
print printTwos(80)