私はこのようになります再帰的なC++プログラムで作られた:それは作品と私は、これは(おおよそ)それを行うための最善の方法であると仮定この種の再帰はなぜC++で動作するのですか?
using namespace std;
#include <iostream>
bool recursive(int num)
{
if (num == 6)
{
return false;
}
else if (num > 6)
{
return true;
}
else
{
if (recursive(num + 1))
{
return true;
}
else
{
return false;
}
}
}
int main()
{
if (recursive(0))
{
cout << "Not found!" << endl;
}
else
{
cout << "Found..." << endl;
}
}
を。
は、私の友人は、このようになりますシンプルな再帰的なプログラム作っ:ちょうど私のような
using namespace std;
#include <iostream>
bool recursive(int num)
{
if (num == 6)
{
return false;
}
else if (num > 6)
{
return true;
}
else
{
recursive(num + 1);
}
}
int main()
{
if (recursive(0))
{
cout << "Not found!" << endl;
}
else
{
cout << "Found..." << endl;
}
}
彼の作品はありませんが、それは動作しますなぜ私は理解していません。私にとっては、elseブロックで何も返されないように見えるので、ブール値がどのように元の関数呼び出しに返されるかはわかりません。好奇心のうち
、私はJavaScriptで同様のプログラム製:
function recursive(index)
{
if (index == 6)
{
return true;
}
else if (index > 6)
{
return false;
}
else
{
recursive(index + 1);
}
}
if (recursive(0))
{
console.log("found");
}
else
{
console.log("not found");
}
をしかし、JavaScriptのプログラムは、私は、これはC++に特異的であることを思わせるその、動作しません。
私の友人のプログラムはなぜ機能しますか?それは完全に有効か、それとも未定義の動作ですか?
友人のコードが壊れています。未定義の動作。 –
元のコードは25行あります。これはばかげて過度に思われる。実際には、スタックオーバーフローが完全なコードを表示しないので、リーダーはコードボックス内をスクロールダウンする必要があります。あなたは同じ機能を快適に* 7つの行に収めることができます。読み込み中でもロジックを1行に減らすことができます: 'return num <6?再帰(num + 1):num> 6; '。しかし、実際のアプリケーションでは、 'return num> 6;'を避けるべきです。 –