2016-10-02 9 views
0

私はプロジェクトオイラーの理由を行ってきました。ある時点で、値を関数の結果と比較したいと思っていました。それ以来、私は別のソリューションを選択しましたが、それは私に不思議な思いが残っています。これはどのように機能しますか?私のようなものを行うにした場合:条件内の関数を使用する

//javascript 
if x == mathyFunction(10){ 
    //do this 
} 

function mathyFunction(y){ 
    if(y>0){ 
    mathyFunction(y-1); 
    return y; 
    } else { 
    return y; 
    } 
} 

を、私は、これは末尾再帰か何か空想ではないことを承知している、私はロジックは、この背後にどのように機能するかを、主にだけ興味があります。

コンピューターはどのように解釈しますか?値== xのいずれか1つがある場合はtrueを返しますか、すべての値が== xの場合にのみ真を返します。私は掘り続けるつもりだが、実験は私に推測を残している。

+0

コードから、10の値をゼロにして、常に0を返すmathyFunctionが表示されます。次にxと比較し、xが0でなければfalseになります。 – nocturns2

+0

@ nocturns2 0を返していないので、yを返しています。 – sepp2k

+0

あなたはそうです。私はyの値を参照していました。これは、xの値と比較する値になります。 – nocturns2

答えて

1

お問い合わせの言語を指定していませんが、return文の通常のセマンティクスを仮定すると、関数は複数回返すことはできません。だから、「個別にすべての値を返す」ことであれば、あなたはこのような何かを意味:

function f() { 
    return 1; 
    return 2; 
    ... 
} 

そして、最初のreturn後のすべてがちょうどデッドコードであるとreturn 1はそこにあるだけreturnの文であるかのようにそれは同じです。関数呼び出しはちょうど1つの値を持ち、その値はあなたが比較している値です。あなたはmathyFunctionxy間の値を含むリストまたはその他のコレクションオブジェクトを返すことを意味している場合

は、その後、xは、そのリストと比較されます。セマンティクスは言語にもよりますが、数字をリストと比較するほとんどの言語では、型エラーまたはちょうどfalseです。

yield文(C#のyield returnやPythonのyieldなど)を参照している値を個別に返すと、関数の結果は何らかのイテレータオブジェクトとなり、前の段落と同じことになります適用されます。

+0

謝罪、私はより具体的にすべきだった。それはJavaScriptです。 'mathyFunction'の背後にあるコードは再帰的なので、再帰して値を返します。これを反映するためにサンプルを少し修正しました。簡単にするため、 'mathyFunction(x、y)'を 'mathyFunction(x)'に変更しました。 – Ucenna

+0

@Ucennaあなたの編集した質問の関数は、アイデンティティ関数です。 'if'のどちらの場合でも' y'を返すだけです。その場合、関数を再帰的に呼び出すこともできますが、再帰呼び出しの結果で何もしないので、何もしません(JavaScriptエンジンが呼び出しを最適化するまでコードを長くすることを除いて) 。再び:関数呼び出しは2回以上返ることはできません - 再帰はそれを変更しません。 – sepp2k

+0

Okey dokey then!私はその結論に向かって進んでいた。あなたが言ったことは、私の結果と完全に一致しています。 – Ucenna

関連する問題