阿里2016前端开发工程师笔试 - 关于斐波那契(fibonacci)数列的JS写法解答

9、[问答题]

题目描述
请实现一个fibonacci函数,要求其参数和返回值如下所示:

/**
*@desc: fibonacci
*@param: count {Number}
*@return: result {Number} 第count个fibonacci值,计数从0开始
fibonacci数列为:[1, 1, 2, 3, 5, 8, 13, 21, 34 …]
则getNthFibonacci(0)返回值为1
则getNthFibonacci(4)返回值为5
*/
function getNthFibonacci(count) {
}



按照习惯先对接收参数,进行类型转换;使用尾递归时要考虑栈溢出问题,不要使用表达式,使用尾函数调用优化。

	function getNthFibonacci(count) {
		var count = count * 1, //如果为其他类型,则转int型
			tailFactorial = function(curr, next, count) {
				if (count === 0) {
					return curr;
				} else {
					return tailFactorial(next, curr + next, count - 1); //尾递归采用函数,可有效解决栈溢出问题
				}
			};
		return tailFactorial(1, 1, count);
	}


上面为常规写法,下面的写法是利用了ES6 函数参数默认值

	function getNthFibonacci(count) {
		var count = count * 1, //如果为其他类型,则转int型
			tailFactorial = function(count, curr = 1, next = 1) { //ES6函数参数默认值
				if (count == 0) {
					return curr;
				} else {
					return tailFactorial(count - 1, next, curr + next); //尾递归采用函数,可有效解决栈溢出问题
				}
			};
		return tailFactorial(count); //直接传count参数
	}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值