使用递归,我如何让我的代码重复?
Using Recursion, how do I get my code to reiterate?
我的任务是使用递归找出 num1 被 num2 除以 num2 需要多少次才能得到整数。我当前的代码是
def fraction_count(num1, num2):
times = int(0)
result = num1/num2
num1 = int(result)
if result%2 == 0:
return times
if (num1/num2)%2 != 0:
return times + 1
print(fraction_count(32,3))
预计是:
fraction_count(32, 3) → 2 # 32 → 10.667 → 3.333 → 1; 1 is whole → 2
所以我现在有 1 的输出,因为它只是 运行 一次。我在这里错过了什么?
这个问题令人困惑,但这实现了与您的示例类似的东西,并为 fraction_count(32, 3)
提供了所需的结果
def fraction_count(num1, num2):
num1 = int(num1)
num2 = int(num2)
count = 0
while num1 % num2:
num1 //= num2
count += 1
return count
抄袭 Nin17 的答案,但满足作业的要求以使其递归:
def fraction_count(num1, num2):
num1 = int(num1)
num2 = int(num2)
if num1 % num2 == 0:
return 0
return 1 + fraction_count(num1 // num2, num2)
如果 num1
和 num2
保证为整数,您可以通过消除类型转换来加快速度。使用类型提示(在 python 3.5 中添加),代码变为:
def fraction_count(num1: int, num2: int) -> int:
if num1 % num2 == 0:
return 0
return 1 + fraction_count(num1 // num2, num2)
简短而甜美。递归可能不如循环有效,但它通常提供简洁的代码。
我的任务是使用递归找出 num1 被 num2 除以 num2 需要多少次才能得到整数。我当前的代码是
def fraction_count(num1, num2):
times = int(0)
result = num1/num2
num1 = int(result)
if result%2 == 0:
return times
if (num1/num2)%2 != 0:
return times + 1
print(fraction_count(32,3))
预计是:
fraction_count(32, 3) → 2 # 32 → 10.667 → 3.333 → 1; 1 is whole → 2
所以我现在有 1 的输出,因为它只是 运行 一次。我在这里错过了什么?
这个问题令人困惑,但这实现了与您的示例类似的东西,并为 fraction_count(32, 3)
def fraction_count(num1, num2):
num1 = int(num1)
num2 = int(num2)
count = 0
while num1 % num2:
num1 //= num2
count += 1
return count
抄袭 Nin17 的答案,但满足作业的要求以使其递归:
def fraction_count(num1, num2):
num1 = int(num1)
num2 = int(num2)
if num1 % num2 == 0:
return 0
return 1 + fraction_count(num1 // num2, num2)
如果 num1
和 num2
保证为整数,您可以通过消除类型转换来加快速度。使用类型提示(在 python 3.5 中添加),代码变为:
def fraction_count(num1: int, num2: int) -> int:
if num1 % num2 == 0:
return 0
return 1 + fraction_count(num1 // num2, num2)
简短而甜美。递归可能不如循环有效,但它通常提供简洁的代码。