您的位置:首页 > 编程语言 > Python开发

python递归3

2018-02-07 23:30 120 查看
用递归函数计算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]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: