我知道这不是匿名函数的用途,但就像我试图通过匿名函数创建递归函数一样.递归函数的原型显然是阶乘函数.问题是,这是很难做出区分的情况下内的匿名函数.到目前为止我设法做的是:
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语法的挑战.
问题是三元运算有效,因为我无法在网上找到任何与之相关的文档。而且我还发现三元在MATLAB 中是不可能的,因此任何建议和答案都将在此处受到赞赏。
#带三元运算的代码
taxes = (income > 50000)*(((income-50000) * 0.20)+(0.10*50000)) + (~(income > 50000))*0.10 *50000
#Condition True and this computation False then this computation
Run Code Online (Sandbox Code Playgroud)
#代码与if和else
if (income) > 50000
#income = income - 50000
#Taxed at 10% (i.e 0.10) for $ 50000
#taxes = 50000 * 0.10
#Rest income will be Taxed at 20% (i.e 0.20)
taxes = 50000 * 0.10 + ((income-50000) * 0.20)
else
#Taxed at 10% (i.e 0.10)
taxes = income * 0.10
endif …
Run Code Online (Sandbox Code Playgroud)