私の友人は彼の最初のCSクラスの一つを取っていて、彼の最初のプログラムで再帰を使っていると言います。彼は私に以下のコードを送る。バットをオフにしてすぐに、私は彼が再帰呼び出しの戻り値をキャッチしていないことに気付きました。しかし、彼はそれが機能すると主張するので、私は彼のプログラムを試してみると、私の驚きには、それは期待どおりに機能します。これがA点からB点に向かうばかげた方法であるという事実を無視して、なぜこれは機能するのでしょうか?この再帰関数はなぜ機能しますか?
私が送ったもので遊んでいて、if文の後にcout
を追加しました。それ以外に、コードの最初のチャンクと2番目のチャンクは同じです。
I入力は最初のプログラムのために、以下の、ここで私が何を得るなら...
が番号を入力してください:10
あなたは入力された:10これは正しいですか? (Y/N):N
が番号を入力してください:12
あなたは、入力された:12は、この正しいですか? (Y/N):Y
メイン()= 12
そして、私は2番目のプログラムで同じことをすれば、その後、ここで私は何を得るのです...
入力してください番号:10
入力した:10これは間違いありませんか? (Y/N):N
が番号を入力してください:12
あなたは、入力された:12は、この正しいですか? (Y/N):Y
メイン()=何が起こっている6300096
!
#include <iostream>
#include <cstring>
#include <cctype>
using namespace std;
int getNum()
{
cout << "Enter a Number: ";
int x;
cin >> x;
cin.ignore(100, '\n');
while(x < 0) {
cout << "Please enter amount greater than 0: ";
cin >> x;
cin.ignore(100, '\n');
}
cout << "You entered: " << x << " Is this correct? (Y/N): ";
char response;
cin >> response;
cin.ignore(100, '\n');
if (response != 'Y') {
getNum();
} else {
return x;
}
}
int main() {
cout << "\nmain() = " << getNum() << endl;
return 0;
}
上部と下部との間の唯一の違いは、if文の後cout
ステートメントです。 C++で
#include <iostream>
#include <cstring>
#include <cctype>
using namespace std;
int getNum()
{
cout << "Enter a Number: ";
int x;
cin >> x;
cin.ignore(100, '\n');
while(x < 0) {
cout << "Please enter amount greater than 0: ";
cin >> x;
cin.ignore(100, '\n');
}
cout << "You entered: " << x << " Is this correct? (Y/N): ";
char response;
cin >> response;
cin.ignore(100, '\n');
if (response != 'Y') {
getNum();
} else {
return x;
}
cout << "returning... " << x;
}
int main() {
cout << "\nmain() = " << getNum() << endl;
return 0;
}
'if(response!= 'Y')'では、getNum();を返すべきではありませんか?これを書くと、 'response!= 'Y''ならば何も返さないので、最初のプログラムが動くというのは主に運がいいです。 – tforgione
はい、あなたは正しいですが、私は運の部分について尋ねています。 –
あなたの質問が分かりませんでした。 – tforgione