Python递归练习

时间:2010-12-13 13:51:49

标签: python

我正在Singpath上锻炼,我坚持这个问题。这个问题在递归练习中,但我不知道这个问题意味着什么。

  

数字a,如果是b,则为b   可以被a/bb整除   is_power
  编写一个名为a的函数   需要参数bTrue和   如果a具有b的权力,则返回{{1}}。

更新

刚刚想到了答案,我在下面发布了它。

9 个答案:

答案 0 :(得分:1)

这是权力的递归定义。你应该写函数

def is_power(a, b):
  ...

该定义给出了一般属性。提示终端案例。如果a和b等于,则函数应该回答为真。

答案 1 :(得分:1)

想想它会做什么,目前,如果你给它,比如a = 32和b = 2。 b*b会给你4,16,256 ......

因此,当您以递归方式调用函数时,必须跟踪原始b。您可以使用默认值(original_b)的第三个变量,但有一种方法可以在不替换b的情况下执行此操作。

答案 2 :(得分:1)

仔细查看您提供的信息:

  

数字a是b的幂,如果它可被b整除,a / b是b的幂。

它说“......和a / b是b的力量”。它没有说“......和a是b * b的力量”。有一个原因:你不会得到两个不同定义的相同结果。

现在查看递归调用的代码:

return is_power(a,b*b)

我们不关心a是否是b * b的幂;我们关心a / b是否是b的幂。那我们为什么要打{{1​​}}?相反,我们应该打电话......好吧,我想你可以搞清楚:)

为什么它不同:让我们说递归发生两次。当我们开始调用函数时,假设b = 2.在第一次递归时,我们传递2 * 2 = 4.在下一次递归时,输入为4,所以我们传递4 * 4 = 16.但是我们跳过了检查2 * 2 * 2 = 8. 8是2的幂,但如果我们调用is_power(a, b*b) # is a a power of b*b?,则is_power(8, 2)永远不会发生,然后is_power(8,8)返回False。

答案 3 :(得分:1)

def isp(a,b):  
    if a%b==0 and isp(a/b,b):
        return True
    elif a/b==b:
        return True
    else:
        return False

答案 4 :(得分:0)

你应该从琐碎的案例开始,实际上有两个:is_power(x,x)is_power(1,x)

一旦你有边缘情况,你只需要正确地写下定义。它提到a/bb,但你写了return is_power(a,b*b)。也许你认为这是相同的,只是用b来缩放两个参数,但事实并非如此。考虑bis_power(27,3)的值。

答案 5 :(得分:0)

这是我的回答......

def is_power(a,b):
    if(a%b != 0):
        return False
    elif(a/b == 1):
        return True
    else:
        return is_power(a/b,b)

答案 6 :(得分:0)

def power(a,b):
if a<=b:
    if a==b: return True
    else:return False
elif a%b==0: return power(a/b,b)
else: return 

答案 7 :(得分:0)

您需要考虑a = 0的边缘情况(上面的一些答案)。我只想特别指出,因为很容易理解为什么a = 1是一个重要的边缘情况,但a = 0也很重要因为如果你不以某种方式承认它,你可能最终会得到无限递归。

如果有帮助,这就是我接触它的方式:

def is_power(a, b):
    if a == b or a == 1:
        # a == b is the 'success' base case (a is a power of b)
        # a == 1 is the success edge case where a is 1 (b ^ 0)
        return True
    elif a % b != 0 or a == 0:
        # a % b != 0 is the 'failure' base case (a is not a power of b)
        # a == 0 is the failure edge case where a is 0. If
        # you don't acknowledge this case in some way, the function
        # will recurse forever
        return False
    else:
        # else, keep recursing
        return is_power(a / b, b)


print is_power(8, 2) # True
print is_power(6, 2) # False
print is_power(0, 2) # False
print is_power(1, 2) # True

答案 8 :(得分:-1)

def is_power(a, b):
    if a%b == 0 and a/b**b:
        return True
    else:
        return False

is_power(10, 12)