我目前正在上一门计算机科学课程,我得到了一个使用Python或伪代码的作业,要求用户输入一个数字,然后将其除以2,然后计算达到1所需的除法数(并在达到1时再添加1)。我以前从未编码,但我想到了。但是无论我输入什么,它都只会返回1。
def divTime (t):
if d <= 1:
return t + 1
else:
return t + 1, divTime(d / 2)
d = input("Enter a number:")
t = 0
print (divTime)(t)
答案 0 :(得分:1)
您可以将输入数字由2除以2,直到递归调用加1,直到输入数字变为1,此时返回1:
def divTime(d):
if d == 1:
return 1
return 1 + divTime(d // 2)
这样:
print(divTime(1))
print(divTime(3))
print(divTime(9))
输出:
1
2
4
答案 1 :(得分:0)
这有效:
def div_time(d, t=0):
if d < 1:
return t
else:
return div_time(d/2, t+1)
d = input("Enter a number:")
print(f"t = {div_time(int(d))}")
答案 2 :(得分:0)
它总是返回1,因为您总是传递0。
您似乎在“循环中思考” –您不需要单独的计数器变量。
除法需要多少次:
k
小于2?没有。k
大于或等于2?除k // 2
之外,还要多花一个。也就是说,
def divTime(x):
if x < 2:
return 0
return 1 + divTime(x // 2)
或
def divTime(x):
return 0 if x < 2 else 1 + divTime(x //2)
答案 3 :(得分:0)
我不会为您提供直接的答案,而是将问题分为几个步骤:
现在暂时忽略输入和边缘情况,让我们集中精力编写一个解决当前问题的函数,然后我们可能会回过头来为该函数提供输入。
问题语句的混淆-您经常会用奇数除以余数,由于余数会跳过精确的数字1。处理余数会导致您的问题含糊不清-我们将重新编写问题说明:
编写一个函数,该函数返回将输入整数除以使其小于或等于1所需的次数。
下一部分是确定可以解决此类问题的算法的类型。由于我们想使用相同的函数运行函数未知次数,因此这似乎是递归的理想用例。
说我提供10作为输入。然后,我们想说10/2 = 5(计数1),5/2 = 2.5(计数2),2.5 / 2 = 1.25(计数3),1.25 / 2 = 0.625(计数4),返回[4]个计数。
现在,我们知道我们需要一个计数器(x = x + 1),递归和一个return / print语句。
class solution:
''' this class will print the number of times it takes to divide an integer by 2 to become less than or equal to 1 '''
def __init__(self):
#this global counter will help us keep track of how many times we divide by two. we can use it in functions inside of this class.
self.counter=0
def counter_2(self, input_integer):
#if the input number is less than or equal to 1 (our goal), then we finish by printing the counter.
if input_integer<=1:
print(self.counter, input_integer)
#if the input is greater than 1, we need to keep dividing by 2.
else:
input_integer=input_integer/2
#we divided by two, so make our counter increase by +1.
self.counter=self.counter+1
#use recursion to call our function again, using our current inputer_integer that we just divided by 2 and reassigned the value.
self.counter_2(input_integer)
s=solution()
s.counter_2(10)