我很高兴再次学习Python中的递归,而基础很简单,似乎有一点我只是失去了递归解决问题的能力。递归基表示法
例如下面的问题。
写递归函数基础,有两个参数,N,基座10的正整数,b,2和9之间的整数。函数返回数量n的基极b表示。数字的基数b表示使用数字0,..,b-1,数字的位置表示基数的功率。
>>> base(5,3) # write 5 in base 3
'12'
>>> base(887,7) # write 887 in base 7
'2405'
我没有使用递归完成问题。
def base(n, b):
if n == 0:
return [0]
digits = []
while n:
digits.append(int(n % b))
n //= b
return digits[::-1]
如果有人愿意通过递归解决这个问题,我将不胜感激。
此外,学习思考问题后递归思考问题的最佳方法是什么?我习惯于让新的概念立即点击我,这个事实让我感到有些担忧,这个事实是我用这种递归方法打砖墙。
“而这并返回正确的答案,它是低效做” - 是什么让你觉得你的迭代求解效率低下?似乎没有任何明显的缺陷。严格地说,有些算法具有更好的渐近运行时间,但是它们需要更复杂的背景知识,而不是您可以合理预期拥有的方法,并且只有涉及数百位数字时,它们才会变得有价值。 – user2357112
另外,请记住递归函数通常由于其大的开销而导致性能不佳 – RafaelC
等待Python 3?你应该用'// ='代替'/ ='进行地板划分。也许这就是为什么你认为它效率低下的原因;如果你使用真正的分区,你会得到错误的结果。 – user2357112