Python 为什么我的递归没有返回所需的输出?

Python 为什么我的递归没有返回所需的输出?,python,recursion,Python,Recursion,我正在编写一个简单返回x^n的递归函数: def myPow(x,n) -> float: def recurs_n(x,n): if n==1: return x if n>1: result = myPow(x,n-1) return result return recurs_n(x,n) print(myPow(2,5)) 上面的输出是2,这显然是不正确的

我正在编写一个简单返回x^n的递归函数:

def myPow(x,n) -> float:
    def recurs_n(x,n):
        if n==1:
            return x

        if n>1:
            result = myPow(x,n-1)

        return result

    return recurs_n(x,n)


print(myPow(2,5))

上面的输出是2,这显然是不正确的。知道我哪里出错了吗?

您的内部函数调用外部函数,这是不允许的。此外,在进入
n-1
步骤时,乘法没有应用任何逻辑。因此,当
n>1
时,需要返回
x*myPow(x,n-1)

我还应该提到,在你的情况下,没有真正的需要有一个内部和外部的功能,一个功能就足够了。就这样,

def myPow(x,n)->浮点:
如果n==1:
返回x
如果n>1:
返回x*myPow(x,n-1)
印刷品(myPow(2,5))

内部函数调用外部函数,这是不允许的。此外,在进入
n-1
步骤时,乘法没有应用任何逻辑。因此,当
n>1
时,需要返回
x*myPow(x,n-1)

我还应该提到,在你的情况下,没有真正的需要有一个内部和外部的功能,一个功能就足够了。就这样,

def myPow(x,n)->浮点:
如果n==1:
返回x
如果n>1:
返回x*myPow(x,n-1)
印刷品(myPow(2,5))

您的代码将一直运行,直到功率n=5达到1为止,此时它将激活第一个if条件,其中x返回(此处x=2),而不继续

另一种选择如下:

def power(N, P):

    # if power is 0 then return 1
    if P == 0:
        return 1
  
    # if power is 1 then number is
    # returned
    elif P == 1:
        return N
  
    else:
        return (N*power(N, P-1))

您的代码将一直运行,直到幂n=5达到1,在这里它将激活第一个if条件,其中x返回(此处x=2),而不继续

另一种选择如下:

def power(N, P):

    # if power is 0 then return 1
    if P == 0:
        return 1
  
    # if power is 1 then number is
    # returned
    elif P == 1:
        return N
  
    else:
        return (N*power(N, P-1))

你是说
result=x*recurse\n(x,n-1)
?啊,是的,我建议你阅读。你不是说
result=x*recurse\n(x,n-1)
?啊,是的,我建议你阅读。看来你复制的代码中的缩进是wrong@oskros没关系,我是新来的。我试图通过反复试验来了解这个网站是如何工作的。我修正了缩进。看起来你复制的代码中的缩进是wrong@oskros没关系,我是新来的。我试图通过反复试验来了解这个网站是如何工作的。我修正了压痕。谢谢oskros,这很有意义。有一个问题,在什么情况下,需要像我在代码中一样拥有内环和外环?@dhsdnfdsfn这与您希望执行某种递归操作,然后应用其他操作的情况有关。例如,如果您首先要递归计算幂,然后将结果转换为字符串,表示myPow(2,5)的结果是32,我明白了,这也是有意义的。谢谢你,汉克斯·奥斯克罗斯,这很有道理。有一个问题,在什么情况下,需要像我在代码中一样拥有内环和外环?@dhsdnfdsfn这与您希望执行某种递归操作,然后应用其他操作的情况有关。例如,如果您首先要递归计算幂,然后将结果转换为字符串,表示myPow(2,5)的结果是32,我明白了,这也是有意义的。非常感谢。