用递归函数计算2的n次方
首先是第一种方法:
# def function(x):
# if x==0:
# return 1
# if x==1:
# return 2
# else:
# if x%2==0:
# return function(x/2)*function(x/2)
# else:
# return function((x-1)/2)*function((x+1)/2)
# print function(5)
value_a = [
0
for i
in
range(
100000)]
mask_b = [
0]*
100000
def
function(
x):
if x==
0:
value_a[
0] =
1
mask_b[
0] =
1
return
1
if x==
1:
value_a[
1] =
2
mask_b[
1] =
1
return
2
x_1 =
1
x_2 =
1
if x%
2==
0:
if mask_b[x/
2] ==
1:
x_1 = value_a[x/
2]
else:
x_1 = function(x/
2)
value_a[x] = x_1 * x_1
mask_b[x] =
1
return x_1 * x_1
if x%
2==
1:
if mask_b[(x-
1)/
2] ==
1:
x_1 = value_a[(x-
1)/
2]
else:
x_1 = function((x-
1)/
2)
# mask_b[(x-1)/2] == 1
# value_a[(x-1)/2] = x_2
if mask_b[(x+
1)/
2] ==
1:
x_2 = value_a[(x+
1)/
2]
else:
x_2 = function((x+
1)/
2)
# value_a[(x+1)/2] = x_3
# mask_b[(x+1)/2] = 1
value_a[x] = x_2 * x_1
mask_b[x] =
1
return x_2 * x_1
print function(
10)
第三种方法,(其实跟第二种方法类似,但每次标记的不同,但是不如第二种方法精致)
value_a = [
0
for i
in
range(
100000)]
mask_b = [
0]*
100000
def
function(
x):
if x==
0:
value_a[
0] =
1
mask_b[
0] =
1
return
1
if x==
1:
value_a[
1] =
2
mask_b[
1] =
1
return
2
x_1 =
1
x_2 =
1
if x%
2==
0:
if mask_b[x/
2] ==
1:
x_1 = value_a[x/
2]
else:
x_1 = function(x/
2)
value_a[x/
2] = x_1
mask_b[x/
2] =
1
return x_1 * x_1
if x%
2==
1:
if mask_b[(x-
1)/
2] ==
1:
x_1 = value_a[(x-
1)/
2]
else:
x_1 = function((x-
1)/
2)
mask_b[(x-
1)/
2] ==
1
value_a[(x-
1)/
2] = x_1
if mask_b[(x+
1)/
2] ==
1:
x_2 = value_a[(x+
1)/
2]
else:
x_2 = function((x+
1)/
2)
value_a[(x+
1)/
2] = x_2
mask_b[(x+
1)/
2] =
1
# value_a[x] = x_2 * x_1
# mask_b[x] = 1
return x_2 * x_1
print function(
10), mask_b[
0:
11]