遞迴基本解法 抽象函式的意義研究

2021-09-19 05:24:36 字數 2031 閱讀 8528

下面是我根據之前公司**抽象的乙個需求:

已知  剩餘人數=總人數-總人數*中毒概率 -總人數*中毒概率*死亡概率 ,單位時長為1ms,記為f(x);隨著時間的變化,剩餘的人數將作為引數x傳入f(x),求50ms時f(x)的值?在時間變化n上 f(x)的值?

解:不妨設其中總人數為x

則剩餘人數 f(x) = x - x * %c -  (x * %c -  x * %c * %d)

其中%c,%d為常數概率,在定義中體現

化簡後原式如下:

f(x)=x(1-%c(1+%d))

若執行函式的單位統一為1ms

則在f(x)的執行的頻率上:

存在et變數 為單位時間的倍數 50ms (則標誌 f(x)的函式遞迴執行50次),可表示為如下演算法:

f(x) _et=f ( f( f(...)_48)_49 )_50

推導:遞迴一次 => f(x) = x(1-%c(1+%d))

遞迴兩次 => f(f(x)) = f(x)* (1-%c(1+%d)) =  x(1-%c(1+%d2)) *( 1-%c(1+%d))

=x(1-%c(1+%d))^2

遞迴三次 => f(f(f(x))) = x(1-%c(1+%d))^2 * (1-%c(1+%d)) = x(1-%c(1+%d))^3

遞迴n次 => f _n = x(1-%c(1+%d))^n

則在計算機中可以定義為介面函式:

function_modpeople(unsigned int recurnum,double allpeople, double& surpuls)

#define ppoisoning 0.02 //中毒概率

#define dpoisoning 0.01 //死亡概率

void function_modpeople(unsigned int _ms_recurnum,double allpeople, double& surpuls)

void function_rmodpeople(double allpeople, double& surpuls)

int main()

{#ifdef _win32

consoleoutformat();

#endif

double surpulspeople;

function_modpeople(50,2000,surpulspeople);

std::cout最終結果:

迭代跟最終演算法結果一致為720.944。

以上是自定義單位週期50ms上的執行結果,那麼我們可以進行如下的推導:

不妨設迭代演算法:

f _n = g(x,n) 其中 x 為 遞迴演算法f(x) _1中的x 也就是初始化引數(2000),那麼n就是在時間時間片上的單位時長。

我們可以用如下的函式影象表示:

其中常數a = (1-%c(1+%d)) 為常數,則抽象函式 y=a^x * c, 上圖是關於人數衰減曲線。

已知以上函式,則關於時間x 和 剩餘f(x),及可以動態算出任意的週期時間的人數,在函式抽象的過程中,我們發現計算人數和中毒概率始終可能為double 型別,則上圖描述衰減變化時存在侷限性,則當x->∞+時始終不會得到剩餘人數為0的f(x)計算結果。則推導此函式為分段函式,

f(n) < 1 時, f(n)=0;

f(n) >= 1 時, f(n)= x(1-%c(1+%d))^n , 其中x=2000;

結果統計中能夠用到演算法:

當0=1; 可求出衰減趨勢:

得到以上函式之後,我們就可以對函式進行 d(f(n))/dn 存在 f(n)>1時,也就是求導,這樣我們對n代入導數計算中,就可以得到瞬時變化率,這裡可以用人員衰減趨勢表示(導數定義),當然,可以進行更多擴充套件(某一時刻內衰減最值)。

基本的遞迴函式

以前一開始接觸遞迴,真的很難理解那到底是怎麼執行的。但是昨天化了一晚上理解完了一段python語言中的一段遞迴後,頓時豁然開朗了。完全搞明白後,自己又寫了cpp中的pow函式和iterate函式,分別用於求某數的次方和累加和。遞迴函式前面的一部分要寫明什麼時候跳出這個迴圈。比如求a的b次方的函式,就...

遞迴函式的基本概念

遞迴函式說白了就是乙個自己呼叫自己的函式 比方說def print num num if num 10 這是跳出的條件 return 這是跳出的位置 else print num num 1 print num num 再次呼叫自己 print num 1 這就算是乙個簡單的遞迴函式,依次列印1 1...

C語言 函式的基本使用和遞迴

三 函式的呼叫 四 函式的宣告和定義 五 函式遞迴 1 庫函式 為了支援可移植性和提高程式的效率,c語言的基礎庫中提供了一系列庫函式,滿足一些基礎功能,他們不是業務性的 在開發的過程中每個程式設計師都可能用的到,方便程式設計師進行軟體開發。c語言常用庫函式 使用庫函式,必須包含 include對應的...