动态规划(斐波那契 JS实现)

日常刷题时遇到如下一个问题,感觉很不做值得做一下并记录(原案例作者使用C++实现这里本人使用JS实现);

题目信息:

解法:

   //动态规划问题解决(斐波那契数)
  
var datas=[ [12], [31,8], [8,19,0], [2,67,4,40], [44,5,27,6,5] ]; console.log('数据: ',datas); var n=5; var sum=0; //i:水平;j:竖直 function maxVal(i,j){ if(i==4) return datas[i][j]; let x=maxVal(i+1,j); let y=maxVal(i+1,j+1); return Math.max(x,y)+datas[i][j]; } var res= maxVal(0,0); console.log('最大值:',res);

思考:动态规划的思想就是分治,通过把一个大问题分解成一小块一小块的,而这里的每一小块通常都是具有重叠的操作;就拿本例来分析通过二维数组的形式来存储斐波那契

   数,根据二维数组的特点可得到以下信息:

  • n 行数据时,n 与 i 是对应的(可以用于终止条件);
  • 从上往下看,节点为 (x,y)时,左子树位置为(x+1, y);右子树的位置为(x+1, y+1);
  • 重复操作的就是本节点的数据加上左子树,右子树的数据进行大小比较;

  因此又根据以上得到的信息,很简单的解决了这个问题;

版权声明:本文为博主原创文章,如需转载,请标明出处。

原文地址:https://www.cnblogs.com/gamecc666/p/14574551.html