将递归结果转换为字符串,以便向后打印

时间:2016-10-26 03:55:53

标签: python string python-3.x recursion

到目前为止,这是我的代码:

import string  
def convert(num,base):
    if num==0:
        return 
    else:
        remainder = num%base
        num = num//base
        b=(str(remainder))
        print(b[::-1],end="")
        return convert(num,base)

而不是打印这个:

>>> convert(29,3)
2001

我需要像这样向后打印它(它需要用字符串来完成):

>>> convert(29,3)
1002

似乎字符串不适用于递归:

>>> convert(29,3)
 ('2', ('0', ('0', ('1', None))))

3 个答案:

答案 0 :(得分:3)

只需更改打印和递归的顺序:

import string  
def convert(num,base):
    if num==0:
        return 
    remainder = num % base
    num = num // base
    convert(num, base)
    print(remainder, end="")

>>> convert(29,3)
1002

不知道convertBase()是什么。

答案 1 :(得分:1)

投入0.02美元。我会选择返回整个字符串,而不是在你去的时候打印它。

def convert(num, base):
    if num == 0:
        return ''
    num, remainder = divmod(num, base)
    return convert(num, base) + str(remainder)

EDIT 也可以使用内置的divmod来计算num和余数。

答案 2 :(得分:0)

你的递归函数在它有一个exit子句(if num == 0:)的意义上是正确的,但是由于递归函数的性质,执行顺序将与你想要打印出来的顺序相反。这里需要做的是继续将余数添加到列表中,最后当你点击退出子句时,反转该列表并打印它。

import string  
def convert(num, base, rem_list=None):
    if not rem_list:
        rem_list = []
    if num == 0:
        rem_list.reverse()
        print "".join(rem_list) 
    else:
        remainder = num % base
        num = num // base
        rem_list.append(str(remainder))
        return convert(num, base, rem_list)



>>> convert(29, 3)
1002
>>> convert(29, 3)
1002