をデクリメント理由を知っているとC++がどのように動作するかのいくつかを知っているが、私は本当にこのコードがどのように動作するか理解していないしていない:(C++)再帰関数は - これは私がちょうど再帰関数で始まるよ
void q9_draw_triangle(int a, int b) {
// a is the starting point, b is the end
if (a > b) return;
// print pattern first
for(int i = 0; i < a; i++){
std::cout << "-";
}
std::cout << std::endl;
// call on triangle where a is incremented once
q9_draw_triangle(a+1,b);
// print pattern last
for(int i = 0; i < a; i++){
std::cout << "-";
}
std::cout << std::endl;
}
q9_draw_triangle(a + 1、b)以降の上半分がどのように動作するかを確認しますが、最後のforループは取得しません。私はデバッガを使ってこのコードを踏んだところで、> bが起こったときに最後の閉じ括弧にジャンプし、最後のforループにジャンプし、三角形の後半を描画して、値を開始する値まで戻し始めました。なぜこれが起こったのか、あるいはこれを減らすためにこれを行う方法を知っているか分かりません。
EDIT:私の入力はa = 3、b = 7だったとします.q9_draw_triangle(a + 1、b)以降の最初の部分は3行、次に4,5、 6,7。次に、最後の閉じ括弧に移動し、最後のforループに移動して7を描画します。最後の閉じ括弧に戻り、forループに戻って6を描画し、次に5,4,3を繰り返します。それはなぜこれをするのですか?それは決して最後のループの上にはもう一度行きませんし、それ自体が減少し、それは私が理解していないものです。そして、それが3になると、関数から最終的に脱出します。これをどうやって知っていますか?
これを理解する助けとなることはありがたいです!
ここでは、特に最適化がオンになっている場合、ここでデバッガで起こっていることに注意してください。現代のコンパイラはコードを大幅に並べ替えることができ、経験豊富なプログラマでさえも何が起こっているのかを再構築するためにはかなりの思考が必要です。最適化をオンにしている場合はオフにしてください。この場合は、余分な出力を追加して呼び出しを表示し、境界を戻すことから始めます。'q9_draw_triangle(a + 1、b)'からの返り値によって起こった減分を考えると、前のaの束縛を復元します。これは、内側の呼び出しの束縛から1を減算するようなものです。 –
「これが減少する」とはどういう意味ですか? – melpomene