二維碼 購(gòu)物車(chē)
部落窩在線教育歡迎您!

如何用LET+LAMBDA直接寫(xiě)遞歸公式?

?

作者:小窩來(lái)源:部落窩教育發(fā)布時(shí)間:2024-06-20 16:07:54點(diǎn)擊:734

分享到:
0
收藏    收藏人氣:0人
版權(quán)說(shuō)明: 原創(chuàng)作品,禁止轉(zhuǎn)載。

編按:

小窩曾介紹運(yùn)用LAMBDA自定義函數(shù)重復(fù)調(diào)用函數(shù)自身實(shí)現(xiàn)遞歸運(yùn)算。那能否不自定義函數(shù)而直接寫(xiě)公式實(shí)現(xiàn)遞歸呢?可以!用LET函數(shù)直接在公式中定義變量,并在LAMBDA中重復(fù)調(diào)用變量自身即可實(shí)現(xiàn)遞歸。

 

問(wèn)題:是否是遞歸公式?

一名愛(ài)好專(zhuān)研函數(shù)的學(xué)員提出了兩個(gè)問(wèn)題:為何以下公式可以實(shí)現(xiàn)分?jǐn)?shù)簡(jiǎn)化?這是遞歸公式嗎?

=LET(f,LAMBDA(f,x,y,IF(y,f(f,y,MOD(x,y)),B2/x&"/"&C2/x)),f(f,B2,C2))

 

圖形用戶界面, 文本, 應(yīng)用程序, 表格
描述已自動(dòng)生成

 

此處分?jǐn)?shù)的簡(jiǎn)化也可以用以下更好理解的公式:

=TEXTJOIN("/",,B2:C2/GCD(B2:C2))

 

表格
描述已自動(dòng)生成

 

說(shuō)明:

GCD函數(shù)比較少用,它是求最大公約數(shù)的函數(shù),可以求兩個(gè)以及多個(gè)數(shù)的最大公約數(shù)。用TEXTJOIN函數(shù)以“/”作為分隔符,將B2、C2分別除以最大公約數(shù)后的商組合起來(lái)得到簡(jiǎn)化的分?jǐn)?shù)。

 

LET+LAMBDA遞歸公式寫(xiě)法

《新函數(shù)LAMBDA的用法(下)——遞歸運(yùn)算詳解》中,利用定義名稱(chēng)自定義函數(shù),并且該函數(shù)在自身的LAMDAD公式中被重復(fù)調(diào)用,實(shí)現(xiàn)了遞歸運(yùn)算。

求任意兩個(gè)整數(shù)之間序列值的和,如求510的和,自定義函數(shù)S進(jìn)行遞歸運(yùn)算:

 

圖形用戶界面, 應(yīng)用程序, 表格
描述已自動(dòng)生成

 

如果不用自定義函數(shù)做遞歸運(yùn)算,也可直接在編輯欄寫(xiě)公式,用LET函數(shù)定義變量并重復(fù)調(diào)用實(shí)現(xiàn)遞歸。

同樣求510的和,公式可以寫(xiě)成:

=LET(a,LAMBDA(a,x,y,IF(x=y,x,x+a(a,x+1,y))),a(a,A8,B8))

 

圖形用戶界面, 應(yīng)用程序, 表格, Excel
描述已自動(dòng)生成

 

此處公式中,LET定義了一個(gè)變量(名稱(chēng))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)行比較:

 

文本
低可信度描述已自動(dòng)生成

 

可以看出,它們的結(jié)構(gòu)都是一樣的,實(shí)現(xiàn)了自身的重復(fù)調(diào)用。

兩者的區(qū)別在于:

自定義S函數(shù)可以直接被自身公式調(diào)用,所以LAMBDA只有兩個(gè)運(yùn)算變量XY,變量循環(huán)式S(x+1,y)只交代兩個(gè)變量的循環(huán)方式;

LET公式中自定的a變量須要作為LAMBDA的一個(gè)變量存在才能調(diào)用,因此LAMBDA3個(gè)變量aX、Y,變量循環(huán)式a(a,x+1,y)交代3個(gè)變量的循環(huán)方式。(不了解變量循環(huán)式的請(qǐng)一定查看《新函數(shù)LAMBDA的用法(下)——遞歸運(yùn)算詳解》

 

圖片包含 圖示
描述已自動(dòng)生成

 

如果在LET公式中不把自定的a變量作為LAMBDA變量,而采用自定義函數(shù)的方式書(shū)寫(xiě)公式,則LAMBDA表達(dá)式中的a會(huì)被當(dāng)作不可識(shí)別的文本,會(huì)出現(xiàn)“#NAME!”錯(cuò)誤。

 



 

 

因此,如果用LET+LAMBDA直接寫(xiě)公式做遞歸運(yùn)算,相比自定義遞歸函數(shù),只需把定義的變量作為LAMBDA的一個(gè)新增變量即可。

 

答案

現(xiàn)在來(lái)看學(xué)員的問(wèn)題。

公式:

=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等于yy等于x除以y的余數(shù);

如果y不等于0,則通過(guò)變量循環(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)算過(guò)程分解如下:

 

表格
描述已自動(dòng)生成

 

可能部分伙伴會(huì)問(wèn):為何這樣的遞歸就實(shí)現(xiàn)了分?jǐn)?shù)簡(jiǎn)化?

其實(shí),整個(gè)變量的循環(huán)取值過(guò)程就是用輾轉(zhuǎn)相除法求最大公約數(shù)。當(dāng)Y等于0時(shí),X就是7031591的最大公約數(shù)。

 

本文配套的練習(xí)課件請(qǐng)?zhí)砑涌头⑿?span>buluowojiaoyu索取。

Excel高手,快速提升工作效率,部落窩教育Excel精品好課任你選擇!

掃下方二維碼關(guān)注公眾號(hào),可隨時(shí)隨地學(xué)習(xí)Excel

IMG_256

相關(guān)推薦:

簡(jiǎn)化公式的函數(shù)LET

小白也可以看懂的LAMBDA遞歸公式

用LAMBDA自定義函數(shù)

用函數(shù)合并多個(gè)工作表數(shù)據(jù)

版權(quán)申明:

本文作者小窩;部落窩教育享有稿件專(zhuān)有使用權(quán)。若需轉(zhuǎn)載請(qǐng)聯(lián)系部落窩教育。