递归阶乘的乘法顺序:n * fact()vs fact()* n

时间:2015-02-17 06:19:43

标签: recursion factorial

在递归因子函数中进行乘法的顺序是否存在差异,这取决于最后一个返回是否为形式为事实(n-1)* n与形式n *事实(n-1)相比较?

int fact(int n)
{
    if (n<2)
        return 1;
    else
        return fact(n-1)*n;
}

2 个答案:

答案 0 :(得分:1)

根据乘法的交换律,fact(n-1)*nn*fact(n-1)之间没有区别。

关于乘法运算的顺序,fact(n-1)*n被评估为

(((1*2)*3)*4...)*n

n*fact(n-1)评估为

n*((n-1)*((n-2)*....3*(2*1)))

答案 1 :(得分:0)

  

乘法的顺序是否有差异   在递归因子函数中取决于是否最后返回   与形式n * fact(n-1)?

相比,形式为事实(n-1)* n

不会有任何区别

  

交换法则表示我们可以交换数字并仍然可以获得   同样的答案......

...当我们添加:

  

a + b = b + a

Addition

......或者当我们相乘时:

  

a×b = b×a

Multiply

现在订单是的,肯定会改变

代表return fact(n-1)*n;

fact(4) will return fact(3)*4;
fact(3) will return fact(2)*3;
fact(2) will return fact(1)*2;
fact(1) will return 1;

所以订单

1*2;
2*3;
6*4;

return n*fact(n-1);

fact(4) will return 4*fact(3);
fact(3) will return 3*fact(2);
fact(2) will return 2*fact(1);
fact(1) will return 1;

所以订单

2*1;
3*2;
4*6