簡體   English   中英

J中的多個遞歸函數調用

[英]Multiple Recursive function calls in J

我目前正在嘗試用J編寫此函數: T(n)= \\ sum_ {i = 1} ^ {n-1} \\ binom {n} {i} \\次T(n-i) (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對於總和的每次迭代都是固定的,而i1變為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.

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