我正在尝试创建一个将整数参数减半的函数,直到它小于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)以下。
您如何获得递归的情况以保持除数或取一半的数字,并将其打印到控制台的迭代次数?
注意:我知道虽然循环更适合这种情况,但是我正在工作的项目中,递归将使以后变得更容易。
谢谢您的帮助!
答案 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)