日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

自己动手写cpu 光盘_自己动手写CPU配套源码

發(fā)布時(shí)間:2024/7/5 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 自己动手写cpu 光盘_自己动手写CPU配套源码 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

自己動(dòng)手寫(xiě)CPU的源代碼,一共15章,可以完整實(shí)現(xiàn)MIPS的指令

文件:n459.com/file/25127180-476886294

以下內(nèi)容無(wú)關(guān):

-------------------------------------------分割線---------------------------------------------

目錄

  • 一、往期回顧
    • 1.生成器代碼詳解
    • 2.生成器的三個(gè)方法
  • 二、遞歸函數(shù)
    • 1.什么是遞歸函數(shù)
    • 2.遞歸函數(shù)調(diào)用原理圖
    • 3.遞歸邊界
    • 4.通過(guò)遞歸函數(shù)實(shí)現(xiàn)的任意數(shù)的階乘
    • 5.這個(gè)遞歸函數(shù)的遞歸臨界點(diǎn)在哪?
    • 6.斐波那契數(shù)列
  • 三、系列推薦

一、往期回顧

1.生成器代碼詳解

def gen():for i in range(5):j = yield iprint(j)# send:與生成器進(jìn)行交互 g = gen()print(next(g)) print(next(g))

第一個(gè)print(next(g))打印的 0,就是生成器生成的元素。第二個(gè)print(next(g))打印的 1 也是生成器生成的元素,None 是print(j)打印的j。

通過(guò)生成器獲取元素的時(shí)候,首先生成器進(jìn)去的話,當(dāng)調(diào)用生成器獲取里面的值,它會(huì)從上往下走,走到j(luò) = yield i這里,把yield這里的i這個(gè)值返回出來(lái),調(diào)用完gen()返回一個(gè)生成器g。

通過(guò)這個(gè)生成器next(g)去拿值的時(shí)候,然后它從上往下執(zhí)行代碼,走到j(luò) = yield i這里,yield相當(dāng)于把i,通過(guò)yield返回出去。

從生成器里面返回出來(lái),就生成一個(gè)數(shù)據(jù)。生成這個(gè)i,到第一個(gè)print(next(g))這里,打印的就是i。

第二個(gè)print(next(g)),再用next()調(diào)用生成器的時(shí)候,那么這個(gè)生成器會(huì)從yield之后繼續(xù)往下執(zhí)行。

通過(guò)next()去觸發(fā)生成器的時(shí)候,yield之后是沒(méi)有內(nèi)容的,j接收的就是空的,所以打印j的時(shí)候,打印出來(lái)的是個(gè)None。

2.生成器的三個(gè)方法

# 生成器的三個(gè)方法: send close throwdef gen():for i in range(5):j = yield iprint(j)# send:與生成器進(jìn)行交互 g = gen()print(g.send(100)) print(next(g)) print(next(g))

運(yùn)行后報(bào)錯(cuò):

生成器的send()方法,它運(yùn)行的時(shí)候會(huì)從上一個(gè)yield結(jié)束的地方來(lái)進(jìn)行運(yùn)行。

在這里只創(chuàng)建了gen()這個(gè)生成器,這個(gè)生成器還沒(méi)有生成過(guò)任何數(shù)據(jù),這個(gè)時(shí)候生成器就暫停在函數(shù)最開(kāi)始的地方def gen():這里。

這里send(100)這個(gè)值進(jìn)去的話,在這里運(yùn)行,直接運(yùn)行for i in range(5):這個(gè)語(yǔ)句,send(100)生成進(jìn)去的這個(gè)值沒(méi)有地方接收,所以報(bào)錯(cuò)了。

send()必須在調(diào)用了一次next()之后才調(diào)用。可以和next()一樣,去獲取生成器里面的內(nèi)容。

2.1next()獲取生成器里面的內(nèi)容:

# 生成器的三個(gè)方法: send close throwdef gen():for i in range(5):j = yield iprint(j)# send:與生成器進(jìn)行交互 g = gen()print(next(g)) print(next(g)) # print(g.send(100))

2.2send()在調(diào)用了一次next()之后調(diào)用,獲取生成器里面的內(nèi)容:

# 生成器的三個(gè)方法: send close throwdef gen():for i in range(5):j = yield iprint(j)# send:與生成器進(jìn)行交互 g = gen()print(next(g)) print(g.send(100)) # print(next(g))

yield只能在函數(shù)里面用。yield關(guān)鍵字是用在創(chuàng)建生成器的時(shí)候,只要函數(shù)里面使用了yield關(guān)鍵字,在調(diào)用函數(shù)的時(shí)候,函數(shù)不會(huì)立馬被執(zhí)行。

因?yàn)檫@個(gè)函數(shù)不是簡(jiǎn)單的函數(shù)了,它是個(gè)生成器。

在函數(shù)外面,是沒(méi)辦法用yield關(guān)鍵字的。

2.3close():關(guān)閉生成器

def gen():for i in range(5):j = yield iprint(j)yield 100# send:與生成器進(jìn)行交互 g = gen()print(next(g)) # print(next(g)) # print(g.send(100))# close:關(guān)閉生成器 g.close() print(next(g))

2.4throw()方法:在生成器內(nèi)部主動(dòng)引發(fā)一個(gè)異常。參數(shù):1.異常類(lèi)型。2.異常信息。

這個(gè)方法可以接收 2 個(gè)參數(shù),第一個(gè)參數(shù):Exception 異常類(lèi)型。第二個(gè)參數(shù):傳入異常的信息。

Exception 報(bào)錯(cuò):

g.throw(Exception,"Method throw called!")

ValueError:

g.throw(ValueError,"清菡,大事不好,報(bào)錯(cuò)了,嚶嚶嚶~")

二、遞歸函數(shù)

1.什么是遞歸函數(shù)

在函數(shù)中調(diào)用函數(shù)自身,我們把這樣的函數(shù)叫做遞歸函數(shù)。

2.遞歸函數(shù)調(diào)用原理圖

3.遞歸邊界

遞歸邊界:退出遞歸的終止條件。

def func():print('99999')func()func()

在外面調(diào)用函數(shù),直接陷入一個(gè)死循環(huán)。在函數(shù)內(nèi)部調(diào)用func()這個(gè)函數(shù),又到def func():這里來(lái)執(zhí)行,然后print('99999'),又func()調(diào)用。

不斷得自身調(diào)用,這樣就造成了死循環(huán)。

Pycharm 有個(gè)檢測(cè)機(jī)制: 當(dāng)它內(nèi)部檢測(cè)到這個(gè)是個(gè)無(wú)限遞歸,沒(méi)有遞歸臨界點(diǎn)的一個(gè)遞歸函數(shù),那么這個(gè)時(shí)候,它遞歸多少次之后,會(huì)自動(dòng)給終止了。

使用遞歸函數(shù)的時(shí)候,一定要注意一個(gè)點(diǎn):就是一定要設(shè)置遞歸的邊界。遞歸的邊界就是遞歸函數(shù)的終止條件。

如果你不設(shè)置遞歸邊界,那么你定義的遞歸函數(shù)就是個(gè)死循環(huán),一直無(wú)限得調(diào)用自身。

4.通過(guò)遞歸函數(shù)實(shí)現(xiàn)的任意數(shù)的階乘

4.1 什么是階乘?

1 的階乘1

遞歸能實(shí)現(xiàn)的,通過(guò)循環(huán)都能實(shí)現(xiàn)。

Python 中遞歸用得不多,不太建議使用遞歸,因?yàn)檫f歸不太好用,用遞歸還不如用循環(huán)。

4.2 怎么去算階乘呢?

定義個(gè)函數(shù),算任意數(shù)的階乘。傳 1,就算 1 的階乘,傳 10 就算 10 的階乘。

可以這樣做:

首先要判斷下它傳進(jìn)來(lái)的這個(gè)參數(shù)是不是等于 1,如果是等于 1 的話,就直接給它return返回出去。然后,如果它不等于 1 的話,就返回return n * (n-1)*(n-2)。

n 傳進(jìn)來(lái)是 1,那應(yīng)該返回 1;如果傳的是 2,應(yīng)該返回return n * (n-1)。

如果在這里用遞歸函數(shù),調(diào)用func(1)。那么這個(gè)時(shí)候,這個(gè)func(1)調(diào)用遞歸函數(shù)。

這個(gè)函數(shù)返回的是什么?

調(diào)用這段代碼:

if n == 1:return 1

返回的是個(gè) 1。

將代碼修改成如下:

def fun(n):if n == 1:return 1else:return n * fun(n-1)fun(3)

如果是fun(3),3 傳進(jìn)來(lái):

def fun(n):if n == 1:return 1

肯定是不成立的。

else后面的代碼return n * fun(n-1)。

這里的 n 是個(gè) 3,fun(n-1)就是fun(2),那么就是3 * fun(2)。

這個(gè)時(shí)候會(huì)再次調(diào)用自身這個(gè)函數(shù):

這個(gè)時(shí)候 n 是什么?

fun(2)的時(shí)候 n 是個(gè) 2,就是3 *2* fun(1)。 fun(1)再執(zhí)行下,出來(lái)的結(jié)果是個(gè) 1。那這里就是個(gè) 1,就是3*2*1。

等于 3 的時(shí)候,返回的結(jié)果就是3*2*1。

4.3 改成fun(4)看看:

首先 4 進(jìn)來(lái),n 等于 4,fun(n-1)就是fun(3)。調(diào)用fun(3)就相當(dāng)于再次調(diào)用fun(n),就是4 *3* fun(2)。

再次調(diào)用fun(2),再進(jìn)來(lái),前面return n * fun(n-1)這一截得到 2,fun(3-1)得到 2,所以最終得到4*3*2* fun(1)。

fun(1)調(diào)用,結(jié)果出來(lái)就是個(gè) 1。就是4*3*2*1。

def fun(n):if n == 1:return 1else:return n * fun(n-1) # 4 *3*2*1fun(4)

5.這個(gè)遞歸函數(shù)的遞歸臨界點(diǎn)在哪?

if n == 1:return 1

當(dāng)n=1的時(shí)候就不會(huì)調(diào)用自身了。當(dāng)滿足某個(gè)條件,不再調(diào)用自身,那么這個(gè)就被稱(chēng)為遞歸臨界點(diǎn)。

例如改成n==-1

if n == -1:return 1

這個(gè)時(shí)候,這個(gè)函數(shù)的遞歸臨界點(diǎn)在哪?

這個(gè)遞歸臨界點(diǎn)就是-1。

def fun(n):if n == -1:# 遞歸臨界點(diǎn):當(dāng)達(dá)到遞歸臨界點(diǎn)的時(shí)候,就不再調(diào)用自身函數(shù)的條件return 1else:return n * fun(n-1) # 4 *3*2*1fun(4)

任何遞歸函數(shù),它的原理都是一樣的。定義一個(gè)遞歸函數(shù),在遞歸函數(shù)里面它其實(shí)就是不斷得調(diào)用自身,然后設(shè)置遞歸函數(shù)的時(shí)候,一定不能忘了遞歸條件。

6.斐波那契數(shù)列

后面的數(shù)都是等于前 2 個(gè)數(shù)相加的結(jié)果。

斐波那契數(shù)列的第一個(gè)數(shù)值是 1,第二個(gè)數(shù)值也是個(gè) 1,第三個(gè)數(shù)等于前兩個(gè)數(shù)相加的結(jié)果(那就是 2),第四個(gè)數(shù)等于于前兩個(gè)數(shù)相加的結(jié)果(那就是 3)。

[1,1,2,3,5]

以此類(lèi)推。

總結(jié)

以上是生活随笔為你收集整理的自己动手写cpu 光盘_自己动手写CPU配套源码的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。