動作しないはずの再帰を示すサンプルプログラムが表示されましたが、動作します。ロジックはかなり明確ですが、再帰された関数呼び出しが返されない場合でも、なぜそれが機能するのですか?return
要求されていなくても、コマンドがスタックから抜け出しているようです。これは言語標準ですか、それともgccのものですか?私はそれをWindowsとLinuxでgccでコンパイルされたCとC++で見ました。
#include <iostream>
#include <cstdlib>
using namespace std;
int isprime(int num, int i)
{
if (i == 1) {
return 1;
}
else {
if (num % i == 0)
return 0;
else
isprime(num, i-1); // should be returned
}
}
int main(int argc, char** argv)
{
int input = atoi(argv[1]);
cout << input << "\t" << isprime(input, input/2) << "\n";
}