python递归3

用递归函数计算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]


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值