我一直在做Euler项目的原因。有一次,我发现自己想要将一个值与一个函数的结果进行比较。我已经选择了一个不同的解决方案,但这让我很好奇。这怎么样?如果我要这样做:
//javascript
if x == mathyFunction(10){
//do this
}
function mathyFunction(y){
if(y>0){
mathyFunction(y-1);
return y;
} else {
return y;
}
}
我知道这不是尾递归或任何花哨的东西,我大多只是好奇逻辑如何在这背后起作用。
计算机将如何解释它?如果其中任何一个值为true
,它是会返回== x
还是仅在所有值== x
时才返回true。实验让我猜测,虽然我会继续挖掘。
答案 0 :(得分:1)
您没有指定您要询问的语言,但假设return
语句的通常语义,函数不能多次返回。因此,如果通过"单独返回所有值",您的意思是这样的:
function f() {
return 1;
return 2;
...
}
然后,第一个return
之后的所有内容都只是死代码,就像return 1
是那里唯一的return
语句一样。函数调用只有一个值,并且该值是您要比较的值。
如果您的意思是mathyFunction
返回列表或其他集合对象,其中包含x
和y
之间的值,则x
将与该列表进行比较。同样,语义将取决于语言,但在大多数语言中,将数字与列表进行比较将是类型错误或只是false
。
如果单独返回值,则指的是yield语句(如C#' s yield return
或Python yield
),则函数的结果将转到是某种迭代器对象,与前一段中的内容相同。