Показать сообщение отдельно
  #4 (permalink)  
Старый 25.01.2012, 22:43
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

Когда n становится равно 1, выражение (n != 1) возвращает false.
Иначе функция запускает саму себя, где n уменьшено на 1.
Она будет запускать саму себя и уменьшать n до тех пор, пока оно (n) не станет равным единице.

легче понять на примере. передадим функции параметры x=2, n=3. должно получиться 8. поехали.
условие можно расписать как :
if( n == 1 ) {
     return x;
} else {
     return x*pow(x, n-1)
}

при проходе x=2, n=3. следовательно, функция возвратит число x*pow(x, n-1), то есть, X, умноженный на результат, возвращённый pow(x,n-1). (что бы умножить X на результат pow, её сначало надо выполнить.)
  • после того, как функция вызывает саму себя (в ней : x=2,n=2), она опять попадает в то же условие, возвращая x*pow(x,n-1). До того, как это возвратить, ей надо опять вычислить результат работы функции pow(x,n-1) (самой себя, т.е).
  • после того, как функция вызывает саму себя в третий раз (нумерую с единицы), то x=2,n=1. В развилке n уже равно единице, так что она возвратит x (двойку).
  • после того, как она возвратила двойку, начинается обратный ход. во второй функции pow(x,n-1) (там, в ней : x=2,n=2) заменяется на результат прохода третьей функции (в которой x=2,n=1). так что вторая функция возвращает x*x. т.к. это операция, в результате возвращается не x*x, а 4. ( не нужное предложение )
  • после того, как второй вызов (в ней x=2,n=2) возвращает результат (четвёрка), в её выражении x*pow(x,n-1) вызов pow заменяется на её результат - четвёрку, т.к. она уже отработала и возвратила результат. Так что в этой функции (в первой, =2,n=3) это выражение становится таким : x*4. X заменяется на число : 2*4. После этого считается значение выражение (восемь) и функция возвращает результат. Им является восьмёрка.
Ответить с цитированием