相关疑难解决方法(0)

递归匿名函数Matlab

我知道这不是匿名函数的用途,但就像我试图通过匿名函数创建递归函数一样.递归函数的原型显然是阶乘函数.问题是,这是很难做出区分的情况下的匿名函数.到目前为止我设法做的是:

f=@(cn,n,f)eval('if n>1; f(cn*n,n-1,f);else;ans=cn;end');
f=@(n)f(1,n,f);
Run Code Online (Sandbox Code Playgroud)

或者:

f=@(cn,n,f)eval('if n>1; f(cn*n,n-1,f);else;disp(cn);end');
f=@(n)f(1,n,f);
Run Code Online (Sandbox Code Playgroud)

不太令人满意的是,直接分配时仍然无法使用此功能,a=f(3)仍会产生错误,因为eval没有得到值.

所以我的问题是,您是否可以通过匿名函数实际执行递归函数,例如以允许例如a=f(3)仅依赖于本机matlab函数(或者您可以在命令行中创建的函数,如我在示例中所做的那样)计算阶乘的方式?

PS:我知道这没有任何实际用途,这只是对你可以弯曲和滥用Matlab语法的挑战.

recursion matlab anonymous-function

13
推荐指数
1
解决办法
950
查看次数

是否可以在MATLAB中使用递归匿名函数?

我一再想要应用一个函数,使用过去的输出作为新输入.为了便于阅读(我从数学的角度来看,而不是程序员的观点),我想将它定义为一个简单的匿名函数而不是一个完整的函数块.所以,而不是像

function f=myfun(x,n)
    if n>1
        f=myfun(myfun(x,n-1),1);
    else
        f=expression(x);
    end
end
Run Code Online (Sandbox Code Playgroud)

我想能写

f=@(x,n) ????
Run Code Online (Sandbox Code Playgroud)

这有可能吗?

matlab functional-programming anonymous-function

3
推荐指数
1
解决办法
821
查看次数