楊輝三角形,又稱賈憲三角形、帕斯卡三角形、海亞姆三角形,是二項式係數在的一種寫法,形似三角形,在中國首現於南宋楊輝的《詳解九章算術》得名,書中楊輝說明是引自賈憲的《釋鎖算術》,故又名賈憲三角形。php
前9層寫出來以下:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1express
首先給你們介紹一種最簡單的求楊輝三角mn值的方法(m爲行,n爲列,好比(5,3)即爲第五行第三個,值爲6)即爲遞歸法:性能
function recursion($m, $n) { if ($n == 1 || $n == $m || $m == 1) { return 1; } $val = recursion($m-1, $n - 1) + recursion($m-1, $n); return $val; }
這種方法實現最簡單,可是若是mn的值特別大的話,性能會很是差,我試了個100,78,就把機器卡死了。。code
迭代法從第一層開始循環,只循環每行中必要的列,最後求出mn位置的值。代碼以下:遞歸
function setNum($row, $list) { $arr = array(); for ($i = 0; $i < $row; $i++) { $start = ($list - ($row - $i)) < 0 ? 0 : ($list - ($row - $i)); $end = ($list - 1) > $i ? $i : ($list - 1); for ($j = $start; $j <= $end; $j++) { if ($i == 0 || $i == 1 || $j == 0 || $i == $j) { $arr[$i][$j] = 1; } else { $arr[$i][$j] = $arr[$i - 1][$j] + $arr[$i - 1][$j - 1]; } } } return $arr[--$row][--$list]; }
固然了,根據楊輝三角的性質:第n行的m個數可表示爲 C(n-1,m-1),用排列組合的公式也能夠得到mn的值,代碼以下:io
function express($m, $n) { $up = 1; for ($i = $m - 1; $i > ($m - $n); $i--) { $up *= $i; } $down = 1; for ($i = $n - 1; $i > 0; $i--) { $down *= $i; } return $up / $down; }