递归:x的n次幂

Posted 我家大宝最可爱

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了递归:x的n次幂相关的知识,希望对你有一定的参考价值。

50. Pow(x, n)

这个递归也非常有意思,同样是有点难以理解,我们求 x n x^n xn其实可以递归成两种情况
x n = ( x n 2 ) 2 n%2==0 x ∗ ( x n 2 ) 2 n%2==1 x^n= \\begincases (x^\\fracn2)^2 & \\textn\\%2==0 \\\\ x*(x^\\fracn2)^2 & \\textn\\%2==1 \\\\ \\endcases xn=(x2n)2x(x2n)2n%2==0n%2==1
转化成递归函数的形式就是
p o w ( x , n ) = p o w ( x , n / / 2 ) 2 n%2==0 x ∗ p o w ( x , n / / 2 ) 2 n%2==1 pow(x,n)= \\begincases pow(x,n//2)^2& \\textn\\%2==0 \\\\ x*pow(x,n//2)^2 & \\textn\\%2==1 \\\\ \\endcases pow(x,n)=pow(x,n//2)2xpow(x,n//2)2n%2==0n%2==1

你问我怎么求解 p o w ( x , n / / 2 ) pow(x,n//2) pow(x,n//2)我也不知道,反正就是根据这个递归公式不断递归就可以求解出来了。我也不知道怎么求 p o w ( x , n ) pow(x,n) pow(x,n),但是如果我求出了 p o w ( x , n / / 2 ) pow(x,n//2) pow(x,n//2)我就可以求出 p o w ( x , n ) pow(x,n) pow(x,n)了,如和求求解 p o w ( x , n / / 2 ) pow(x,n//2) pow(x,n//2)呢?我只要求解出 p o w ( x , n / / 4 ) pow(x,n//4) pow(x,n//4)就可以了,这样问题最后就会缩减到n=1也就是停止条件上,然后递归再进行返回,我们操作这个返回结果即可。

class Solution:
    def myPow(self, x: float, n: int) -> float:

        def dfs(x,n):
            if n == 0:
                return 1
            y = dfs(x, n//2)
            if n % 2 == 0:
                return y * y
            else:
                return x * y * y
        
        if n < 0:
            x = 1 / x
            n = -n

        r = dfs(x,n)
        return r

以上是关于递归:x的n次幂的主要内容,如果未能解决你的问题,请参考以下文章

leetcode 每日一题 50. Pow(x, n)

leetcode 每日一题 50. Pow(x, n)

LeetCode50. Pow(x, n)

一个数number的n次幂 python的pow函数

一个数number的n次幂 python的pow函数

力扣50题 Pow(x,n)