-1

factorial関数で実行された最後の return ステートメントはreturn 1;、なぜ 1 ではなく正しい値を返すのですか?

#include <iostream>
using namespace std;

unsigned int factorial(unsigned int);

int main ()
{
    unsigned int a=4;
    cout<<factorial(a);

    return 0;
 }

 unsigned int factorial(unsigned int a)
  {
      if (a==0)
            return 1;   
      else
        return a*(factorial(a-1));
   }
4

5 に答える 5

2

階乗関数は、まで自分自身を呼び出しますa == 0main()factorial は自分自身の呼び出しを停止し、1 を返しますが、最初にすべての呼び出しを自分自身に戻す必要があるため、すぐには戻りません。

自分自身を呼び出す関数は、再帰関数と呼ばれます。このリンクを参照してください:

http://www.learncpp.com/cpp-tutorial/710-recursion/

またはこのリンク:

http://www.youtube.com/watch?v=UFL7GkAHnTQ

于 2013-09-23T05:07:51.043 に答える
2

たぶんこれが役立つ

factorial(5)
   calls factorial(4)
      calls factorial(3)
         calls factorial(2)
            calls factorial(1)
            returns 1
         returns 2*1 (equals 2)
      returns 3*2 (equals 6)
   returns 4*6 (equals 24)
returns 5*24 (equals 120)

ご覧のとおり、1 を返すのは最初の return ステートメントであり、最後ではありません。

于 2013-09-23T04:58:29.407 に答える
1

このステートメントreturn 1;階乗関数の再帰呼び出しの停止条件です。

再帰の概念に関するリンクを確認してください: http://pages.cs.wisc.edu/~calvin/cs110/RECURSION.html

簡単に言えば、 factorial (3) のような呼び出しから始まる呼び出しのシーケンスは次のようになります。

--> return 3 * factorial(2)
--> return 3 * 2 * factorial(1)
--> return 3 * 2 * 1 * factorial(0)
& Finally

--> return 3 * 2 * 1 * 1 which is equal to 6
于 2013-09-23T04:56:58.703 に答える
1

1 ではなく正しい値を返すのはなぜですか?

うーん...おそらく

return a * factorial(a - 1);

?

于 2013-09-23T04:59:14.260 に答える
0

factorial を呼び出すと、互いに乗算される factorial 呼び出しのチェーンが生成されるため、最後に factorial(0) が返され、1 が返されます。

したがって、 factorial(4) は次のように計算されます。

factorial (4) = 4 * (factorial(3))
factorial (3) = 3 * (factorial(2))
factorial (2) = 2 * (factorial(1))
factorial (1) = 1 * (factorial(0))
factorial (0) = 1

これをまとめると:

factorial (4) = 4 * (3 * (2 * (1 * 1) ) )
于 2013-09-23T04:57:26.823 に答える