国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python八皇后問題的學習體會與分析-遞歸的運用

2019-11-09 20:49:29
字體:
來源:轉載
供稿:網友
這是教材上的代碼:
def conflict(state, nextX):    nextY = len(state)    for i in range(nextY):        if abs(state[i]-nextX) in (0, nextY-i):           return True    return Falsedef queens(num, state=()):    #PRint num,state    for pos in range(num):        if not conflict(state, pos):                    if len(state) == num-1:                         yield (pos,)                    else:                         for result in queens(num, state+(pos,)):                              #生成八或N個的元組                              yield (pos, ) + result

分析一:

1.此種方法看上去較酷,感到很高大上的編程。占用內存小,運用了生成器。

2.教材上講了如果不能安排好下一下皇后,則進行上一個皇后的位置改變,再迭代。但我感覺是究舉之后的依次判斷,即列出所有可能的位置組合,再進行一一判斷。

3.可以先理解,用遞歸實理的N層迭代。如下代碼

def my_func(num, state=()):        for i in range(9):        print i,         if len(state) == num-1:            yield (len(state),)            #print "len state",len(state)        else:           for result in my_func(num, state+(0,)):                yield (len(state),)+result                print "resault....",resulta=list(my_func(8))

4.用遞歸實現的N層迭代:

def test(num,state=()):    print "start.",    for i in range(num):        print i,        if len(state)==num-1:            yield (100,)        else:            for result in test(num,state+(0,)):                    print "in."                    print "recur...len result is:  ",len(result),result                    yield (50,)+resulta=list(test(4))print len(a)print a兩個yield很關鍵,第一個是結束遞歸的條件,第一個,生成N個的元組,練習時可以改i,為POS,就像八皇后了。5.理解了4.對于八皇后,就更易理解了。加了對沖突的判斷,即便是要找的解了。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 康马县| 桐乡市| 沧源| 聂拉木县| 固始县| 宝坻区| 霞浦县| 平远县| 巴中市| 泰和县| 吴川市| 内黄县| 任丘市| 湘阴县| 永州市| 漳州市| 新巴尔虎右旗| 舟曲县| 时尚| 南充市| 二手房| 阳泉市| 夹江县| 枝江市| 临颍县| 旬邑县| 银川市| 河池市| 嵊州市| 临沭县| 东兰县| 九龙县| 隆德县| 毕节市| 忻城县| 昆山市| 玉林市| 马公市| 大连市| 阜阳市| 平远县|