如何用LET+LAMBDA直接寫遞歸公式?
?
作者:小窩來源:部落窩教育發(fā)布時(shí)間:2024-06-20 16:07:54點(diǎn)擊:1066
編按:
小窩曾介紹運(yùn)用LAMBDA自定義函數(shù)重復(fù)調(diào)用函數(shù)自身實(shí)現(xiàn)遞歸運(yùn)算。那能否不自定義函數(shù)而直接寫公式實(shí)現(xiàn)遞歸呢?可以!用LET函數(shù)直接在公式中定義變量,并在LAMBDA中重復(fù)調(diào)用變量自身即可實(shí)現(xiàn)遞歸。
問題:是否是遞歸公式?
一名愛好專研函數(shù)的學(xué)員提出了兩個(gè)問題:為何以下公式可以實(shí)現(xiàn)分?jǐn)?shù)簡化?這是遞歸公式嗎?
=LET(f,LAMBDA(f,x,y,IF(y,f(f,y,MOD(x,y)),B2/x&"/"&C2/x)),f(f,B2,C2))
此處分?jǐn)?shù)的簡化也可以用以下更好理解的公式:
=TEXTJOIN("/",,B2:C2/GCD(B2:C2))
說明:
GCD函數(shù)比較少用,它是求最大公約數(shù)的函數(shù),可以求兩個(gè)以及多個(gè)數(shù)的最大公約數(shù)。用TEXTJOIN函數(shù)以“/”作為分隔符,將B2、C2分別除以最大公約數(shù)后的商組合起來得到簡化的分?jǐn)?shù)。
LET+LAMBDA遞歸公式寫法
《新函數(shù)LAMBDA的用法(下)——遞歸運(yùn)算詳解》中,利用定義名稱自定義函數(shù),并且該函數(shù)在自身的LAMDAD公式中被重復(fù)調(diào)用,實(shí)現(xiàn)了遞歸運(yùn)算。
求任意兩個(gè)整數(shù)之間序列值的和,如求5到10的和,自定義函數(shù)S進(jìn)行遞歸運(yùn)算:
如果不用自定義函數(shù)做遞歸運(yùn)算,也可直接在編輯欄寫公式,用LET函數(shù)定義變量并重復(fù)調(diào)用實(shí)現(xiàn)遞歸。
同樣求5到10的和,公式可以寫成:
=LET(a,LAMBDA(a,x,y,IF(x=y,x,x+a(a,x+1,y))),a(a,A8,B8))
此處公式中,LET定義了一個(gè)變量(名稱)a。a等于表達(dá)式LAMBDA(a,x,y,IF(x=y,x,x+a(a,x+1,y)))。
遞歸,必須要實(shí)現(xiàn)函數(shù)(變量)對(duì)自身的循環(huán)調(diào)用。把自定義S函數(shù)公式與a變量表達(dá)式進(jìn)行比較:
可以看出,它們的結(jié)構(gòu)都是一樣的,實(shí)現(xiàn)了自身的重復(fù)調(diào)用。
兩者的區(qū)別在于:
自定義S函數(shù)可以直接被自身公式調(diào)用,所以LAMBDA只有兩個(gè)運(yùn)算變量X和Y,變量循環(huán)式S(x+1,y)只交代兩個(gè)變量的循環(huán)方式;
而LET公式中自定的a變量須要作為LAMBDA的一個(gè)變量存在才能調(diào)用,因此LAMBDA有3個(gè)變量a、X、Y,變量循環(huán)式a(a,x+1,y)交代3個(gè)變量的循環(huán)方式。(不了解變量循環(huán)式的請(qǐng)一定查看《新函數(shù)LAMBDA的用法(下)——遞歸運(yùn)算詳解》)
如果在LET公式中不把自定的a變量作為LAMBDA變量,而采用自定義函數(shù)的方式書寫公式,則LAMBDA表達(dá)式中的a會(huì)被當(dāng)作不可識(shí)別的文本,會(huì)出現(xiàn)“#NAME!”錯(cuò)誤。
因此,如果用LET+LAMBDA直接寫公式做遞歸運(yùn)算,相比自定義遞歸函數(shù),只需把定義的變量作為LAMBDA的一個(gè)新增變量即可。
答案
現(xiàn)在來看學(xué)員的問題。
公式:
=LET(f,LAMBDA(f,x,y,IF(y,f(f,y,MOD(x,y)),B2/x&"/"&C2/x)),f(f,B2,C2))
這就是一個(gè)典型的遞歸公式。
LET函數(shù)自定義變量f既等于整個(gè)LAMBDA表達(dá)式,同時(shí)又是LAMBDA的一個(gè)變量;
變量循環(huán)式f(f,y,MOD(x,y))調(diào)用了自定義變量f,并交代了三個(gè)變量的循環(huán)方式:f保持不變,x等于y,y等于x除以y的余數(shù);
如果y不等于0,則通過變量循環(huán)式f(f,y,MOD(x,y))不斷的循環(huán),直到y等于0;
當(dāng)y等于0,則輸出最終結(jié)果B2/x&"/"&C2/x;
最后f(f,B2,C2),為表達(dá)式f的三個(gè)變量賦值并進(jìn)行運(yùn)算。
具體的遞歸運(yùn)算過程分解如下:
可能部分伙伴會(huì)問:為何這樣的遞歸就實(shí)現(xiàn)了分?jǐn)?shù)簡化?
其實(shí),整個(gè)變量的循環(huán)取值過程就是用輾轉(zhuǎn)相除法求最大公約數(shù)。當(dāng)Y等于0時(shí),X就是703和1591的最大公約數(shù)。
本文配套的練習(xí)課件請(qǐng)?zhí)砑涌头⑿?span>buluowojiaoyu索取。
做Excel高手,快速提升工作效率,部落窩教育Excel精品好課任你選擇!
掃下方二維碼關(guān)注公眾號(hào),可隨時(shí)隨地學(xué)習(xí)Excel:
相關(guān)推薦:
用函數(shù)合并多個(gè)工作表數(shù)據(jù)
版權(quán)申明:
本文作者小窩;部落窩教育享有稿件專有使用權(quán)。若需轉(zhuǎn)載請(qǐng)聯(lián)系部落窩教育。
最熱教程
- 像綠皮火車一樣長像珠穆拉瑪峰一樣高的Excel表怎么操作才方便?
- Power Query實(shí)戰(zhàn):按指定次數(shù)遞增數(shù)據(jù)
- 2019年全網(wǎng)最全—excel提取身份證信息合集?。ńㄗh收藏)-下篇
- 明明沒有重復(fù),Excel卻判定數(shù)據(jù)重復(fù),這是怎么回事?
- 文本格式的求和,及求和中最容易出現(xiàn)的問題解疑
- 致命缺陷:不懂一維表!
- 函數(shù)組合思維,你有嗎?
- 學(xué)會(huì)這2個(gè)公式,整理考勤數(shù)據(jù)只要一分鐘
- 就算被說是拍馬屁也成,今天你應(yīng)該這樣發(fā)Excel報(bào)表……
- 如何計(jì)算Excel單元格中的算式,四種求和方法請(qǐng)收好!