python非递归遍历
① 关于python中一个递归二叉树遍历的问题
你在出错的地方前面加个print,把这两个值都print出来不就知道错在哪个了?
② python非递归建立二叉树
http://code.activestate.com/recipes/286239-binary-ordered-tree/
看看他写的吧
③ 用Python输出斐波那契数列的前20项,要用递归和非递归两种方法
非递归:
int first = 1
print(first) # 第一项
int second = 1
print(second) # 第二项
int count = 2
while count < 20:
item = first + second
print(item)
first = second
second = item
count += 1
递归:
def fibonacci(n):
if n == 0:
return 0
elif n == 1:
return 1
else:
return fibonacci(n - 1) + fibonacci(n - 2)
def main():
for i in range(1, 21):
print(fibonacci(i))
main()
④ python 字符串匹配,非递归,不知道怎么输出(也就是不知道怎么验证code是否正确)
直接使用string的index方法
import string
target1 = 'atgacatgcacaagtatgcat'
key11 = 'atg'
def countSubStringMatch():
try:
target1.index(key11)
except ValueError:
return False
return True
if __name__ == '__main__':
print countSubStringMatch()
#看countSubStringMatch输出的啥,是True就是包含子字符串了,Flase就是不包含
#验证代码的话,就是保存成 XXX.py文件,然后在cmd里面运行这个文件,前提是你的python命令在PATH环境变量中,或者你把文件放到python安装目录的bin目录下面,用cmd进到bin目录,执行py文件
⑤ python怎么用递归遍历多层目录树
#coding=utf-8
search_id = '69d0'
search_list = [{'id':'0337', 'name':'de', 'parent_id':'None'},
{'id':'2ddf', 'name':'se', 'parent_id':'None'},
{'id':'3010', 'name':'12', 'parent_id':'69d0'},
{'id':'3119', 'name':'121', 'parent_id':'3010'},
{'id':'3229', 'name':'1211', 'parent_id':'3119'},
{'id':'3d37', 'name':'14', 'parent_id':'69d0'},
{'id':'58c8', 'name':'11', 'parent_id':'69d0'},
{'id':'63b9', 'name':'a','parent_id':'None'},
{'id':'954c', 'name':'n', 'parent_id':'63b9'},
{'id':'69d0', 'name':'1', 'parent_id':'954c'},
{'id':'d2f9', 'name':'13', 'parent_id':'69d0'},
{'id':'defb', 'name':'test', 'parent_id':'None'}]
search_ids = []
#例如如果search_id = '69d0' search_ids=[3010,3d37,58c8,d2f9,3119,3229]
def search_pid(pid,id_list,id_results):
for id in id_list:
if id['id'] not in id_results:
if id['parent_id'] in pid:
id_results.append(id['id'])
pid.append(id['id'])
search_pid(pid,id_list,id_results)
search_pid([search_id],search_list,search_ids)
print search_ids
⑥ python汉诺塔非递归
python汉诺塔非递归,运用list和function知识的解答
无论stack还是recursion都是从汉诺塔的原理去解决问题,但如果已经想清楚汉诺塔的原理,其实只用把答案print出来就行了
先找规律:
一层:A-->C
两层:A-->B
-------
A-->C
-------
B-->C
三层:A-->C
A-->B
C-->B
-------
A-->C
-------
B-->A
B-->C
A-->C
注意到n层汉诺塔有(2**n) - 1 个步骤,而中间的一步(两个分割线之间)都是“A-->C”,中间的这一步将这一层汉诺塔的解分为上下两个部分
仔细观察,上面一部分是将上一层的解中所有的B,C交换,下面一部分是将上一层的解中所有的A,B交换
例如第二层是:
A-->B
A-->C
B-->C
第三层上部分就将第二层的解的C换成B,B换成C,即得出:
A-->C
A-->B
C-->B
第三层下部分就将第二层的解的A换成B,B换成A,即得出:
B-->A
A-->C
C-->B
这个规律同样适用于第一层,和以后的所有层
然后就好办了,代码如图:
代码
其中convertAB,convertBC就是AB交换,BC交换的函数,这两个函数可以自己定义,用中间变量即可