如何使用递归多次除数并跟踪迭代?

时间:2018-11-05 22:48:22

标签: python recursion

我正在尝试创建一个将整数参数减半的函数,直到它小于1。我还想跟踪执行此操作所需的迭代次数。这是到目前为止的内容,但是我在递归情况下会遇到什么问题:

def case(number):
    if number == 1:
       return 1
    else:
       return number * 0.50    # not sure how to do this part
case(20)

因此,例如,如果我传递了20个作为“ case”的参数,我希望递归case /函数执行20 * 0.50(或20/2)= 10,然后取10 * 0.50 = 5, 然后取5 * 0.50 ect ..直到数字小于1。

在此示例中,要经过6次迭代才能达到1(0.625)以下。

您如何获得递归的情况以保持除数或取一半的数字,并将其打印到控制台的迭代次数?

注意:我知道虽然循环更适合这种情况,但是我正在工作的项目中,递归将使以后变得更容易。

谢谢您的帮助!

4 个答案:

答案 0 :(得分:3)

def case(number):
    if number <= 1: # base case (exit)
       return 1
    else:
       return 1+case(number * 0.50) # recursive case

答案 1 :(得分:1)

def case(number, t=0):
    if number < 1:
        return (number,t)
    else:
        return case(number/2, t+1)

这将返回一个包含数字(例如0.625)和迭代次数(例如6)的元组

参数t代表迭代次数。

number小于1时,不需要执行其他任何操作,因此我们返回元组(number, t)。如果number大于或等于1,将返回以case作为第一个参数(number/2)和number作为参数的调用t+1的结果。第二个参数(t)。这样,t对于每个递归级别都会增加一次。

答案 2 :(得分:0)

def case(number):
   return recursiveFunc(number, 0, 0.5)
def recursiveFunc(number, count, multiplier):
    if(number <= 1):
       return count
    return recursiveFunc(number*multiplier, count+1, multiplier)

答案 3 :(得分:0)

def case(number,count):
    if number < 1:
       return "Taken %s iteration to get below 1 (%s)" % (count,number)
    return case(number * 0.5, count+1)  

print case(20, 0)