如何使用总和和组合来编程递归关系?

我正在尝试使用MATLAB来解决问题。 的递推关系是这样的:如何使用总和和组合来编程递归关系?

F(1,R,N)=(0.5)^ N * NCR

所以,这是该函数I制作:

function [ f ] = fxprb(n,r,g) 

%UNTITLED Summary of this function goes here

if n==1

f=(0.5^g)*nchoosek(g,r)

else

i=1:g-1

x=fxprb(n-1,i,g);

f=nchoosek(g,r)*sum(x.*((i/N)^r)*((1-i/N)^r));

end

end

我不知道如何编码,我卡住了。 f(1,0,3)工作正常,但当n是大于二,我没有得到的结果在所有的,而不是我得到这样的错误消息:

???错误使用==>nchoosek at 24
第二个输入必须是一个非负整数。

错误==> fxprb在==>
f=(0.5^g)*nchoosek(g,r);

错误在9
x=fxprb(n-1,i,g);

你能帮助我吗?

回答:

通过在递归调用中将参数i = 1:g-1转换为fxprb(),假设nchoosek()为矢量输入生成多个输出。

它没有。

所以,你只需要循环:

function f = fxprb(n,r,N) 

if n==1

f = (0.5^N) * nchoosek(N,r);

else

f = 0;

for k = 1:N-1

f = f + fxprb(n-1,k,N) * (k/N)^r * (1 - k/N)^(N-r) ;

end

f = f * nchoosek(N,r);

end

end

以上是 如何使用总和和组合来编程递归关系? 的全部内容, 来源链接: utcz.com/qa/260966.html

回到顶部