有一个X*Y的网格,小团要在此网格上从左上角到右下角,只能走格点且只能向右或向下走。请设计一个算法,计算小团有多少种走法。给定两个正整数int x,int y,请返回小团的走法数目。
函数原型为:
CountSteps($x,$y)
例如:当$x=1,$y=1,可以画出图如下
得到的结果将是 2 种走法
public function index(){
echo $this->index1(10, 10).'<br>';
$this->index2(10, 10);
}
//非递归
public function index1($x,$y){
for($i = 0; $i <= $x; $i++){
$f[$i][0] = 1;
}
for($i = 0; $i <= $y; $i++ ){
$f[0][$i] = 1;
}
//print_r($f);exit;
for($i = 1; $i <= $x; $i++){
for($j = 1; $j <= $y; $j++){
$f[$i][$j] = $f[$i-1][$j] + $f[$i][$j-1];
}
}
print_r($f[$x][$y]);
}
//递归
public function index2($x,$y){
if($x==0 && $y==0)
return 0;
if ($x == 0 || $y == 0)
return 1;
$total = $this->day20_2($x - 1, $y) + $this->day20_2($x, $y - 1);
return $total;
}