PHP递归求第n位的值
今天去面试,笔试遇到一道用递归方法求值的题目,由于近几年所从事的开发工作中很少需要用到算法,结果一时间尽然想不出解决方法,好尴尬啊☹。回来后,立马编程解题,缓解一下不平的内心。
题目要求:
有一组数为:1,1,2,3,5,8,13,21,…
求第n位的数。
下面是解决方法(写在控制器中,方便测试):
/**
* Class Arithmetic
* 算法类
*/
class Arithmetic{
/**
* @var int 用于recursion()函数,第几位的值
*/
private $number=1;
/**
* @var int 用于recursion()函数,第n-1位的值
*/
private $forwardFirst=1;
/**
* @var int 用于recursion()函数,第n-2位的值
*/
private $forwardSecond=0;
public function getNumber($n){
echo $this->recursion($n);
}
/**
* 递归 求第n位的值,数据规律如下:
* 第1位:1
* 第2位;1
* 第3位:2
* 第4位:3
* 第5位:5
* 第6位:8
* 第7位:21
* ...
* 第n位:?
*
* @param integer $n 第几位,从第一位开始
* @return integer|string $number 第几位的值
*/
public function recursion($n){
if($n >1){
$this->number=$this->forwardFirst+$this->forwardSecond;
$this->forwardSecond=$this->forwardFirst;
$this->forwardFirst=$this->number;
$n=$n-1;
return $this->recursion($n);
}else if ($n==1){
return $this->number;
}else{
return "n必须为正数";
}
}
}