求一组数的最后一个数等于前面所有数的和并返回最后一个数

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yin_991/article/details/81506950

如果有一组已知的数,有着这样的规律:1,1,2,3,5,8,n。

求n的值是多少。

如果用代码实现,应该怎么做呢?这组数的规律就是最后一个数等于前面两个数的和,既然是对前两个数求和,那么就至少得要两个数,所以这样的话就得分情况讨论,此时用到if判断语句。如果数组长度小于等于2,就返回1;如果数组长度大于2,就计算前面两个数的和。

这种情况是数组已知,只是求最后一个数。

这是一种实现方法,代码思路如下:关键的地方有四点,第一是if判断,如果数组的长度不大于2就返回1,否则进行下一步;第二点是用splice方法截取数组的最后一个数、倒数第二个数;第三点就是需要用parseInt()方法把截取到的字符串数字转换为数值;最后一点就是数值相加。最后返回这相加得到的值。用到的arr[n+1]其实是“强行”扩展了数组长度来获得结果。

		function num(arr) {
			var n=arr.length-1;
			// console.log(arr)
			if(n>=2) {
				var a=parseInt(arr.splice(n,1));
				var b=parseInt(arr.splice(n-1,1));
				arr[n+1]=a+b;
				return(arr[n+1]);
			} else {
				return 1;
			}
		}
		var arr=[1,1,2,3,5,8];
		console.log(num(arr));

还有另一种情况。

如果是我只想知道我输入了数的个数,就给我返回最后n的结果,我不用设置变量来存储数组了,就只是输入这组数的个数,输出结果来,应该怎么做呢?

貌似这种办法更简洁。其实这里的灵感来源于递归算法求阶乘。我开始没太确定这种方法的可行性,后来经过控制台调试发现可以用。

		function num(n) {
			if(n<=1) {
				return 1;
			} else if (n>=2) {
				return num(n-1)+num(n-2);
			}
		}
		console.log(num(5));

如果后续发现有更好的方法会继续补充。

end.

猜你喜欢

转载自blog.csdn.net/yin_991/article/details/81506950