私は再帰を実証するためのサンプルプログラムを見せましたが、それはうまくいかないようですが、そうではありません。ロジックははっきりしていますが、再帰関数呼び出しが返されない場合でもなぜ機能しますか? return
コマンドが要求されていなくてもスタックからブレークアウトするようです。これは言語標準ですか、gccのものですか?私はWindowsとLinux上でgccでコンパイルされたCとC++でそれを見た。なぜ再帰呼び出しが明示的なreturn文なしでスタックからブレークするのですか?
#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";
}
未定義の動作には、偶発的に動作するコードが含まれています。関数呼び出しは、正しいCPUレジスタに戻り値を残します。 –
私は質問の投票の理由を見ません。多くの初心者が持つことができるのはかなり良い疑いです。 – varevarao
@varevarao:初心者の「疑問」は研究努力によって満たされます。それは、私はupvotedと述べた。 –