From 97c4eab263f75ea501435931639a629407baa2cf Mon Sep 17 00:00:00 2001 From: Eduardo Galeano Date: Wed, 7 Oct 2020 21:46:25 -0500 Subject: [PATCH 1/2] Added recursive optimized exponetiation algorithm. --- algorithms/recursion/exponentiation.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 algorithms/recursion/exponentiation.py diff --git a/algorithms/recursion/exponentiation.py b/algorithms/recursion/exponentiation.py new file mode 100644 index 0000000..2c6cfdc --- /dev/null +++ b/algorithms/recursion/exponentiation.py @@ -0,0 +1,18 @@ + +def exponentiation(baseNumber, power): + answer = None + + if power == 1: + answer = baseNumber + + elif power == 2: + answer = baseNumber * baseNumber + + else: + halfAnswer = exponentiation(baseNumber, power//2) + answer = halfAnswer * halfAnswer + + if power%2 == 1: + answer *= baseNumber + + return answer \ No newline at end of file From 03f9f39e684e9755a4ac235708f037c133117693 Mon Sep 17 00:00:00 2001 From: Eduardo Galeano Date: Thu, 8 Oct 2020 20:33:43 -0500 Subject: [PATCH 2/2] Fixed working for 0 and negative power values. --- algorithms/recursion/exponentiation.py | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/algorithms/recursion/exponentiation.py b/algorithms/recursion/exponentiation.py index 2c6cfdc..5709894 100644 --- a/algorithms/recursion/exponentiation.py +++ b/algorithms/recursion/exponentiation.py @@ -2,17 +2,20 @@ def exponentiation(baseNumber, power): answer = None - if power == 1: - answer = baseNumber - - elif power == 2: - answer = baseNumber * baseNumber - - else: + if power > 1: halfAnswer = exponentiation(baseNumber, power//2) answer = halfAnswer * halfAnswer if power%2 == 1: answer *= baseNumber - return answer \ No newline at end of file + elif power == 1: + answer = baseNumber + + elif power == 0: + answer = 1 + + else: # negative power + answer = 1 / exponentiation(baseNumber, abs(power)) + + return answer