Петля треугольника Паскаля производит ненужный NaN - PullRequest
0 голосов
/ 15 февраля 2019

Что не так?

pascals_triangle <- function(x) {
  for (i in 1:x) {
    holder <- c()
    n <- i - 1
    for (j in 1:x) {
      r <- j - 1
      nCrlessone <- factorial(n)/(factorial(n-r)*factorial(r))
      holder <- c(holder, nCrlessone)
    }
  print(holder)
  }
}



> pascals_triangle(1)
 [1] 1
> pascals_triangle(10)
 [1]   1 NaN NaN NaN NaN NaN NaN NaN NaN NaN
 [1]   1   1 NaN NaN NaN NaN NaN NaN NaN NaN
 [1]   1   2   1 NaN NaN NaN NaN NaN NaN NaN
 [1]   1   3   3   1 NaN NaN NaN NaN NaN NaN
 [1]   1   4   6   4   1 NaN NaN NaN NaN NaN
 [1]   1   5  10  10   5   1 NaN NaN NaN NaN
 [1]   1   6  15  20  15   6   1 NaN NaN NaN
 [1]   1   7  21  35  35  21   7   1 NaN NaN
 [1]   1   8  28  56  70  56  28   8   1 NaN
 [1]   1   9  36  84 126 126  84  36   9   1

См. Результат выше, не печатая NaN в первом испытании.Посмотрите на результат выше, не печатая NaN в первом испытании.См. Результат выше, не печатая NaN в первом испытании.

1 Ответ

0 голосов
/ 15 февраля 2019

Если вы хотите избежать вычислений, сохранения и отображения значений NaN, вы можете изменить границы цикла в j, чтобы перейти с 1:i вместо 1:x:

pascals_triangle <- function(x) {
    for (i in 1:x) {
        holder <- c()
        n <- i - 1
        for (j in 1:i) {
            r <- j - 1
            nCrlessone <- factorial(n)/(factorial(n-r)*factorial(r))
            holder <- c(holder, nCrlessone)
        }
        print(holder)
    }
}

pascals_triangle(10)

[1] 1
[1] 1  1
[1] 1  2  1
[1] 1  3  3  1
[1] 1  4  6  4   1
[1] 1  5 10 10   5   1
[1] 1  6 15 20  15   6   1
[1] 1  7 21 35  35  21   7  1
[1] 1  8 28 56  70  56  28  8 1
[1] 1  9 36 84 126 126  84 36 9  1

Это изменение гарантирует, что вы вычисляете только нижнюю поддиагональ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...