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交換的函數,這兩個函數可以自己定義,用中間變數即可