【发布时间】:2015-11-21 02:48:38
【问题描述】:
我知道这不是匿名函数的用途,但作为一个谜题,我试图通过匿名函数创建一个递归函数。递归函数的原型显然是阶乘函数。问题是在匿名函数内很难区分大小写。到目前为止,我设法做的事情如下:
f=@(cn,n,f)eval('if n>1; f(cn*n,n-1,f);else;ans=cn;end');
f=@(n)f(1,n,f);
或者:
f=@(cn,n,f)eval('if n>1; f(cn*n,n-1,f);else;disp(cn);end');
f=@(n)f(1,n,f);
不太满意的是直接赋值的时候还是不能使用这个函数,a=f(3)还是会报错,因为eval没有得到值。
所以我的问题是,你真的可以通过匿名函数来做一个递归函数吗?以允许例如的方式计算阶乘a=f(3) 仅依赖于本机 matlab 函数(或您可以在命令行中创建的函数,就像我在示例中所做的那样)?
PS:我知道这没有任何实际用途,它只是一个挑战,你可以在多大程度上弯曲和滥用 Matlab 的语法。
【问题讨论】:
-
你的意思是匿名函数吗?对我来说,函数句柄似乎是一类更广泛的对象。但我不是专家,所以我真的在问。
-
@AndrasDeak 我当然知道,谢谢你指出这一点!
-
目前没有 Matlab 访问权限,但您是否尝试过像
'if n>1; f(cn*n,n-1,f); else; cn; end这样的事情? -
@patrik 我 做了,但没有帮助:) 问题是,如果你只是调用
f(3),它将执行if...,一切都很好。但是如果你想分配a=f(3),它想做类似a= if...的事情。我们非常需要 matlab 中的条件三元运算符;) -
This 可能会有所帮助。
标签: matlab recursion anonymous-function