簡體   English   中英

如何在R中編寫雙重遞歸函數

[英]How to write a double recursive function in R

我想在R中編寫一個程序來計算值,該程序如下。

     options( expressions = 5e5 )
     P_n_m=function(r,n,m) {
       if(r >0 & n==1 & m==0 | r >=0 & n==0 & m==1) return(1)
       else if(r >= 0 & n >= 0 | r >= 0 & m >= 0){ 
         return(n/(n+m)*P_n_m(r-n-m,n-1,m)+m/(n+m)*P_n_m(r,n,m-1))
       }
       else return(0)
     }

但這總是給我錯誤。 我也嘗試調整系統設置,但仍然無法正常工作。 我想計算P_n_m(49,7,7),但我不知道程序中哪一部分是錯誤的。 誰能幫我解決這個問題?

您的函數具有無限遞歸。

計算P_n_m(r,n,m) ,必須同時計算P_n_m(rnm,n-1,m)P_n_m(r,n,m-1) 注意,第二項僅減少m,而使r和n不變。 這導致無限遞歸。

讓我們跟蹤您的示例P_n_m(49,7,7)。 它將必須計算(除其他事項外)
P_n_m(49,7,6)必須計算
P_n_m(49,7,5)必須計算
P_n_m(49,7,4)必須計算
P_n_m(49,7,3)必須計算
P_n_m(49,7,2)必須計算
P_n_m(49,7,1)我們有m == 1但沒有n == 0,r&n> 0,所以我們需要
P_n_m(49,7,0)我們有m == 0但沒有n == 1,r&n> 0,所以我們需要
P_n_m(49,7,-1)現在我們需要
P_n_m(49,7,m)降至負無窮大。

您需要重新考慮函數的定義。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM