Python Day 15 (遞迴函式、二分尋找演算法)

來源:互聯網
上載者:User

標籤:有序數組   The   同學會   個人   告訴   實現   eva   AC   art   

Python Day 15 (遞迴函式、二分尋找演算法)遞迴函式

  在一個函數裡在調用這個函數本身。

  遞迴的預設最大深度:998

  修改預設最大深度

import sysprint(sys.setrecursionlimit(100000))
import syssys.setrecursionlimit(1000000)count = 1def my_func():    global count    print(count)    count += 1    my_func()my_func()===========================def my_age(n,start=23):      if n == 2:        return start    elif 0 < n < 2:        return my_age(n + 1) - 2       elif n > 2 :        return my_age(n - 1) + 2    else:        return ‘不存在。‘print(eval(‘my_age‘)(2))

 

二分尋找演算法
一個偶然的機會,我想起以前還在Google上班的時候,有時候大家會在飯桌上討論最新想出來的一些面試題。在眾多有趣又有難度的題目中,有一道老題卻是大家都紛紛選擇避開的,那就是去實現二分尋找。因為它很好寫,卻很難寫對。可以想象問了這道題後,在5分鐘之內面試的同學會相當自信的將那一小段代碼交給我們,剩下的就是考驗面試官能否在更短的時間內看出這段代碼的bug了。二分尋找是什麼呢,這個不只程式員,其他很多非技術人員也會。比如我想一個1到100以內的數,你來猜,我告訴你每次猜的是大了還是小了,你會先猜50,然後25, 然後。。。用不了幾個問題就猜出來了。1到100範圍太小的話,我們放大點猜個人名,你問中國人外國人,古代人現代人,男的女的,用不了幾個問題也問出來了。在電腦裡,則是在一個有序數組裡面,不斷通過二分的方法縮小關鍵字的可能下標範圍。當然了,我們不一定在一個有序數組裡尋找,也可以在一個很大的狀態空間裡,去尋找一個單調函數的取值。這樣的做法,似乎編個程式很容易實現,但是,D.Knuth大神說了:Although the basic idea of binary search is comparatively straightforward, the details can be surprisingly tricky 雖然二分尋找的基本思想相對來說很直接,但具體實現起來有特別多的坑。另一位大神,編程珠璣的作者Jon Bentley,他做了我們在文章開頭不敢做的事,他布置作業讓他的學生們寫二分尋找,然後他一個個來看。結果呢,他發現90%是錯的。因此在他的編程珠璣這本書中,專門有一章講解了二分尋找,雖然他的範例仍然是錯的,見下面的Java Bug。埋下這個bug的人,也正式Jon Bentley的學生。還有好事者,更是找了許多教科書,發現20本教科書裡面,只有5本是寫對了的,於是他發了一篇文章到ACM。當然這是早在1988年的時候。

 

  

如果有這樣一個列表,讓你從這個列表中找到66的位置,你要怎麼做?

l = [2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,76,82,83,88]

def search(num,l,start=None,end=None):    start = start if start else 0    end = end if end else len(l) - 1    mid = (end - start)//2 + start    if start > end:        return None    elif l[mid] > num :        return search(num,l,start,mid-1)    elif l[mid] < num:        return search(num,l,mid+1,end)    elif l[mid] == num:        return mid

 

Python Day 15 (遞迴函式、二分尋找演算法)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.