PHP递归求第n位的值

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必须为正数";
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值