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]
首先是第一种方法:
# 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]
相关文章推荐
- python获取父类的子类(遍历,递归),并循环执行所有子类的某一方法
- Python正则匹配递归获得给出目录下的特定类型的文件小技巧
- Python Tricks(十)—— 递归修改文件名
- Python脚本- 递归遍历文件夹,获取指定扩展名文件,修改文件内容
- Python递归遍历目录下所有文件
- Python递归
- Python 创建递归文件夹
- 【python】递归
- 洗礼灵魂,修炼python(26)--编程核心之“递归”
- python数据结构学习笔记-2016-11-12-02-递归的应用
- Python递归输出字典所有不同深度的路径
- Python7--局部变量、全局变量、缺省参数、不定长参数、递归
- python并发编程之多线程2------------死锁与递归锁,信号量等
- python绘图案例——递归绘制分形树
- vijos - P1494杨辉三角形中的偶数个数 (递归分治 + 记忆化搜索 + python)
- 斐波那契,非递归形式(python)
- python 递归和lamda函数
- python基础-递归
- Python递归
- Python递归删除.svn文件夹