母函式 在他人講解的基礎上添些自己的理解

2021-08-02 13:48:49 字數 1437 閱讀 6352

求用1分、2分、3分的郵票貼出不同數值的方案數:

在這裡每種是無限的。

以展開後的x^4為例,其係數為4,即4拆分成1、2、3之和的拆分方案數為4;

即 :4=1+1+1+1=1+1+2=1+3=2+2

這裡再引出兩個概念"整數拆分"和"拆分數":

所謂整數拆分即把整數分解成若干整數的和(相當於把n個無區別的球放到n個無標誌的盒子,盒子允許空,也允許放多於乙個球)。

整數拆分成若干整數的和,辦法不一,不同拆分法的總數叫做拆分數。

現在以上面每種種類個數無限為例,給出模板:

(這裡的模板其實不是上面這題的解答**,解答**需要改動一些數值)

#include using namespace std;  

// author: tanky woo

// www.wutianqi.com

const int _max = 10001;

// c1是儲存各項質量砝碼可以組合的數目

// c2是中間量,儲存每一次的情況

int c1[_max], c2[_max];

int main()

for(i=2; i<=nnum; ++i) // ----- ②

for(j=0; j<=nnum; ++j) // ---- ⑤

} cout << c1[nnum] << endl;

} return 0;

}

我們來解釋下上面標誌的各個地方:(***********!!!重點!!!***********)

①  、首先對c1初始化,由第乙個表示式(1+x+x^2+..x^n)初始化,把質量從0到n的所有砝碼都初始化為1.

②  、 i從2到n遍歷,這裡i就是指第i個表示式,上面給出的第二種母函式關係式裡,每乙個括號括起來的就是乙個表示式。

(i代表的是第i個表示式,像上面所舉的求3種郵票所能組成的數值的方案數,i應該是小於等於3,因為它只有3種郵票)

(1+x+x^2+x^3)(1+x^3),這時候j應該指示的是合併後的第乙個括號的四個變數的係數。

(有關第3點,我覺得可以這麼理解,我們是先固定j,變化k,j在這其實就是指第i-1個表示式中冪為j的那個數;而k則是原來第i個表示式中冪為k的數,如果你看懂了之前有關母函式的講解,對於k每次增i應該也能理解。就拿原作者剛剛舉的為例(1+x)(1+x^2)(1+x^3),(1+x)為第乙個表示式,(1+x^2)是原來的第二個表示式,當j=0時,k變化,其實就是拿(1+x)中的1分別乘以(1+x^2)的1和x^2,最後得到(1+x+x^2+x^3)(1+x^3)

)④ 、 k表示的是第j個指數,所以k每次增i(因為第i個表示式的增量是i)。

⑤  、把c2的值賦給c1,而把c2初始化為0,因為c2每次是從乙個表示式中開始的。

Python自學 08 函式基礎(上)

就像中學所學的一樣,也可以稱之為 方法 可以用來解決各種數學計算或者實現切合實際的功能,例如計算圓的面積 s pi r r,只要知道半徑,什麼圓的面積都可以計算出來。這就是一種抽象,再舉個栗子 計算數列的和 1 2 3 100,可以抽象記成 而電腦程式也是一樣,函式就是一種最基本的一種 抽象的方式。...

a b 在編譯基礎上的討論

關於討論 中的 c a b 這個表示式的面試題一直都在出現。從很直觀的角度上來說你可以理解成為以下的兩種形式 乙個是 c a b 另一種是c a b 其實做過編譯程式的人可以考慮以下過程,在詞法分析階段要進行的是將輸入的檔案切成token,並形成token序列,你可以知道 對 進行處理的時候將執行以...

R 在dplyr基礎上編寫函式 1 eval

tidyverse系列的r包雖然解放了大家的雙手,但同時也束縛了我們重新編寫函式的能力。在這一套語法中,要實現作為函式引數的字串和變數之間的相互轉換困難重重,但只要掌握了其中原理後,也就能夠游刃有餘地處理了。首先要理解基礎r中幾個重要又易忽略的函式。eval evaluate an unevalua...