Python 递归函数:接收偶数 n,返回使最终值等于 n 的奇数乘以 2 的结果

0 投票
2 回答
759 浏览
提问于 2025-04-18 08:16

写一个叫做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)

撰写回答