根據運行的環境,操作系統可以分為桌面操作系統,手機操作系統,服務器操作系統,嵌入式操作系統等。 【0613更新后的答案】 閱讀. 在本書中使用階乘n!舉個例子,它更清楚. 例如,定義了def factorial(n):. 接下來如何實施? 以計算階乘(6)為例,有兩種方法: (1)6! =? ,6! = 6 5!然后5! =? 5! = 5 * 4! ...等等 (2)1! = 1,但關閉6!太遠了-》 2! = 2 1! = 2,稍微靠近但仍然很遠-> 3! = 3 * 2! = 6,距離比較近,但距離不夠……所以是6! 第一個是遞歸,第二個是迭代. 遞歸與定義有關. 函數定義會自行調用. 例如,這里的階乘函數. factorial(6)= 6 * factorial(5)或factorial(n)= n * factorial(n-1),這是真的. 但是,由于無法傳遞此公式,因此可以從右側計算左側的值. 因為不知道階乘(5)操作數的值在右側,如何計算它. 這是遞歸: 例如,如何到達B的定義為: 首先到達A,然后向前1公里是B; 假設有一種方法可以證明這個結論是正確的,我們不能保證達到B,因為這種方法需要達到A的前提,但是沒有達到A的方法. (所以我個人認為遞歸的定義是正確的,但不一定實現. )這是“定義如何將B作為”. 這種“定義”很有趣. 可以說這是對的,但沒有切入點. 意義. 因此,如果要遞歸能夠實現遞歸,則遞歸的定義中必須具有一定的條件才能將遞歸終止為一個值,而不是無限地調用自身. 迭代更現實. 迭代是代代相傳地求真,使誤差越來越小. 例如這里,雖然3!當然還有6!雖然相去甚遠,但是如果您愿意接受此錯誤,則認為它是6!近似值也是可能的,至少從1起!一路迭代3!錯誤仍然比1好!變小. 迭代的每個步驟都有特定的值,只要您愿意接受此錯誤,就可以停止. 總而言之,在同一過程中,共同點只會重復多次. 但是執行的位置和方法大不相同. 一般迭代(例如找到π的近似值)對于第一代來說可能是100,對于第二代來說是10,對于第三代來說是5,對于第四代來說是3.5 ...這樣,每一代都是一個特定的值,并且遞歸也沒什么. 聯系. 但是更令人困惑的是迭代計算6!時間迭代和遞歸一起出現!在從上一代計算下一代的迭代過程中,上一代由fact-iter()表示遞歸和迭代的區別,下一代也由fact-iter()表示,這不是很清楚. 要計算特定值,它是基于基于事實的定義. 由于事實事實本身是在事實事實的定義中調用的,因此事實事實是遞歸定義的. 也就是說,每一代迭代計算的特定值都是由遞歸定義的過程事實迭代器生成的. 【上一個答案】 它本來有點令人困惑,我只是隱約地想到了[牛頓迭代法],就好像它在數值分析中提到過一樣. 它應該能夠體現迭代思維. 牛頓迭代method_360wikibaike.so.com 突然之間,除了“多次重復計算”外,迭代和遞歸都不相同. 【迭代】從粗略到精確: 例如牛頓迭代,如果要使用函數表示此曲線中垂直坐標y和水平坐標x之間的數學關系(例如,可以是y = x或y = x * x ?),您可以首先給出一個初始函數y = f0(x),然后根據算法g計算第一時間,即f1 = g(f0),得到f1. 不要在這里深入了解g的細節,僅說明存在此過程. y = f1(x)更接近實際曲線遞歸和迭代的區別,但是精度不夠,因此請使用g進行第二次計算,即f2 = g(f1),得到f2. y = f2(x)可以比y = f0(x),y?? = f1(x)更準確地表示y和x之間的關系,但這還不夠...因此請使用g來計算第三次... 當您認為準確性令人滿意時可以停止. 例如,如果您認為y = f2(x)已經可以表示y和x之間的關系,那么您可以接受此錯誤,則無需計算f3. 如果我們在這里停止,我們總共迭代了2次. 第一次迭代的效果是從f1中獲取f2,第二次迭代的效果是從f2中獲取f3 ...為什么需要執行迭代?由于f2比f1更準確,因此f3比f2更準確...繼續迭代,它將變得越來越準確...只要您愿意,就可以迭代無數次 [遞歸]大事變小,小事變: 例如,遞歸在函數f()的實現中,并且在滿足條件時調用f(). 在滿足條件時調用f()很重要. 也就是說,如果不滿足此條件,則不會調用f(),也不會執行下一輪遞歸. 否則,f()無條件調用內層f(),內層f()無條件調用內層f(),內層f()調用內層f()...未完成...走了. 例如: 遞歸二進制搜索.
|
溫馨提示:喜歡本站的話,請收藏一下本站!