[英]Multiple Recursive function calls in J
我目前正在嘗試用J編寫此函數: (T(1)= 1)
我的代碼是:
ints=: }.&i. NB. list from 1 to n-1
chs =: ints !/ [ NB. list of binomials
subi=: - ints NB. list from n-1 to 1
T=: +/(($: @: subi) * chs) ^: (1&<)
函數可以正常工作,但是遞歸調用失敗,因為使用列表調用T,然后試圖在列表上生成整數列表。
我該如何解決呢?否則該函數將如何編寫?
遞歸動詞的一般形式為:
T =: main_body`default_value @. main_or_default_check
默認值和檢查很容易在這里:
default_value =: 1"_
main_or_default_check =: 1 = ]
二項式也是標准的,我們可以寫成
binom =: 4 : '(!x)%((!y)*(!x-y))'
main_body的形式為main_body =: sum binomial(n,i) * T ni
。 我們可以在sum的內部使用輔助動詞f
,以使情況更清楚:
f =: 4 :'(x binom y) * T x - y'
或默認形式: f =: binom * [: T -
。
n
對於總和的每次迭代都是固定的,而i
從1
變為n-1
( >:in-1
),所以:
sum =: 3 :'+/(y&f)"0 >:i.y-1'
將以上內容放在一起:
T =: 3 : '+/(y&f)"0 >:i.y-1'`(1"_)@.(1 = ])
T each >:i.8
┌─┬─┬─┬──┬───┬────┬─────┬──────┐
│1│2│9│52│375│3246│32781│378344│
└─┴─┴─┴──┴───┴────┴─────┴──────┘
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.