3.1 KiB
3.1 KiB
用 Python 计算 a^n:用 Python 计算幂的不同方法
原文:https://www.askpython.com/python/examples/compute-raised-to-power
在本教程中,我们将以几种不同的方式计算 a的n 次方。让我们一步一步地看一个又一个方法。
也读作: Python pow()方法
方法 1:基本方法
计算a^n最基本的方法就是将乘以数字 a,n 乘以反复计算。这种方法非常慢,效率也不高。
尽管如此,这种方法的代码还是在下面提到了。
def basic_approach(a,n):
ans = 1
for i in range(n):
ans *= a
return ans
print(basic_approach(2,5))
我们从上面提到的代码得到的输出是 32 ,这是正确的输出。现在让我们转到下一个方法。
方法 2:普通递归方法
我们将通过递归来处理这个方法。如果你想知道更多关于递归的知识,你可以阅读下面提到的教程。
了解更多关于递归的知识:Python 中的递归
这里的基本概念是 fun(a,n) = a * fun(a,n-1) 。所以递归可以用来计算 a 的 n 次幂。
代码如下所述。添加评论供您参考。
def normal_recursion(a,n):
# If power is 0 : a^0 = 1
if(n==0):
return 1
# If power is 1 : a^1 = a
elif(n==1):
return a
# For n>=2 : a^n = a* (a^(n-1))
term = normal_recursion(a,n-1)
term = a * term
# Return the answer
return term
print(normal_recursion(2,5))
我们从上面的代码中得到的输出是 32 ,这是准确无误的输出。让我们转到下一个方法,它只使用递归,但以更好的方式。
方法 3:快速递归方法
前面我们使用了线性递归方法,但是计算 n 的幂也可以基于 n 的值(幂值)来计算。
- 如果 n 是偶数那么 fun(a,n)=【fun(a,n/2)】^ 2
- 如果 n 是奇数那么 *fun(a,n)= a (fun(a,n/2)】^ 2)
这将是一种更有效的方法,并将在很大程度上减少程序所花费的时间。下面提到了相同方法的代码。
def fast_recursion(a,n):
# If power is 0 : a^0 = 1
if(n==0):
return 1
# If power is 1 : a^1 = a
elif(n==1):
return a
# For n>=2 : n can be even or odd
# If n is even : a^n = (a^(n/2))^2
# if n is odd : a^n = a * ((a^(n/2))^2)
# In both the cases we have the calculate the n/2 term
term = fast_recursion(a,int(n/2))
term *= term
# Now lets check if n is even or odd
if(n%2==0):
return term
else:
return a*term
print(fast_recursion(2,5))
该代码的输出也是正确的 32 。与以前的方法相比,这种方法占用一半的时间。
结论
因此,在本教程中,我们学习了如何使用各种方法计算 a 的 n 次幂,有些方法涉及递归,有些不涉及。你可以采用任何一种方法,但选择最有效的方法总是更好。
感谢您的阅读!编码快乐!👩💻