0

私は C++ を学んでいますが、関数が単独で呼び出されたときに再帰が機能するのに問題があります。

#include <iostream>

using namespace std;

int countdown(int y) {
    if (y==1) {
        return 1 && cout << y << endl;
    }
    else {
        return countdown(y-1);
    }
}

int main () {
    cout << "Countdown from ten: " << endl;
    cout << countdown(10) << endl;
}

もちろん、これを実現する方法は他にもありますが、この例を作成したのは、関数が再帰的にどのように呼び出されるかについての私自身の理解を確認するためです。

が関数 as に渡されている&& cout << yかどうかを確認するために追加した例では、関数を as と呼んでいるかどうかに関係なく、常にそうであるように見えます。y1countdown(10)

ここで明らかな何かが欠けているかどうか誰かに教えてもらえますか?

4

2 に答える 2

3

' cout << y ' は、y が 1 であるとテストされた場合にのみ実行されます。

このバージョンは、私があなたが望むと思うことを行います:

#include <iostream>
using namespace std;

int countdown(int y) 
{
    cout << y << endl;
    if (y==1)
    {
        return 1;
    }
    else 
    {
        return countdown(y-1);
    }
}

int main() 
{
    cout << "Countdown from ten: " << endl;

    cout << countdown(10) << endl;
}
于 2013-03-16T21:20:33.077 に答える
1

コール スタックは次のようになります。

main
  countdown(10)
    countdown(9)
      countdown(8)
        countdown(7)
          countdown(6)
            countdown(5)
              countdown(4)
                countdown(3)
                  countdown(2)
                    countdown(1)
                      std::cout << 1 << std::endl;

カウントダウン全体を見たい場合は、出力コマンドを if 条件の前に移動します。

また、出力の書き方は非常に単調です。1 %&& coutを に変換し、 に変換できるcoutためにのみ機能することに注意してください。そのようなコードを書かないでください。boolboolint

于 2013-03-16T21:20:34.537 に答える