2015-02-17 2 views
1

Есть ли разница в порядке выполнения умножений в рекурсивной факториальной функции в зависимости от того, является ли последнее возвращение в форме фактом (n-1) * n по сравнению с формой n * fact (n-1)?Порядок умножений в рекурсивном факториале: n * fact() vs. fact() * n

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

ответ

0

Есть ли разница в том порядке, что умножения выполняются в рекурсивная факториальная функция в зависимости от того, является ли последнее возвращение фактом (n-1) * n по сравнению с формой n * факт (n-1)?

Нет там не будет никакой разницы

В коммутативных Законы говорят, мы можем поменять местами цифры снова и все еще получить тот же ответ ...

... когда мы добавить:

a + b = b + a

Addition

... или когда мы умножаем:

A × B = B × в

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 
+0

Ответ, очевидно, будет таким же, но как насчет порядка выполнения умножений? – Roope

+0

@Roope, проверьте отредактированный ответ –

1

Согласно коммутативному закону умножения, нет никакой разницы между fact(n-1)*n и n*fact(n-1).

Что касается порядка операций умножения, fact(n-1)*n оцениваются как

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

и n*fact(n-1) оцениваются как

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

Ответ на этот вопрос очевидно, будет одинаковым, но как насчет порядка, в котором выполняются умножения? – Roope

+0

@Roope Отредактирован ответ. – timrau

+1

Чтобы быть ясным, в обоих случаях: (((1 * 2) * 3) * 4 ...) * n' и 'n * ((n-1) * ((n-2) * ....3 * (2 * 1))) сначала будет выполнено самое внутреннее умножение (1 * 2 или 2 * 1), затем следующее низшее (2 * 3 или 3 * 2), так что нет, нет никакой разницы в порядок выполнения умножений. – Barney

Смежные вопросы