Javascript 递归:最小的步骤数
我必须编写一个递归程序来解决这个问题: 你被分配到两个空桶,分别为“a”升和“b”升,并且靠近大海。 要在其中一个桶中分离出“c”升水,您需要进行的最小步骤数是多少 给定的“a”、“b”和“c”返回的步骤数最小 我试着用一种简单的方法来做,我不能在这里应用递归Javascript 递归:最小的步骤数,javascript,node.js,recursion,Javascript,Node.js,Recursion,我必须编写一个递归程序来解决这个问题: 你被分配到两个空桶,分别为“a”升和“b”升,并且靠近大海。 要在其中一个桶中分离出“c”升水,您需要进行的最小步骤数是多少 给定的“a”、“b”和“c”返回的步骤数最小 我试着用一种简单的方法来做,我不能在这里应用递归 function steps(a,b,c){ let s = 0; let aLimit = 0; let bLimit = 0; if (a + b < c){ for (let l = 0; l < (a + b
function steps(a,b,c){
let s = 0;
let aLimit = 0;
let bLimit = 0;
if (a + b < c){
for (let l = 0; l < (a + b); l++){
s += 1;
aLimit += 1;
if(aLimit == a){
s+=1;
}
console.log(s);
}
}
功能步骤(a、b、c){
设s=0;
设aLimit=0;
设bLimit=0;
如果(a+b
我不知道这是否正确,但也许这是一个开始。(注意,如果gcd(a,b)
不除以c
,这可能会永远重复出现,如果c
等于a
或b
),我认为可能会有更有效的答案
函数f(a,b,c,步骤=0,aState=0,bState=0,memo={}){
常量键=[aState,bState]
//解决方案
if(图例包括(c))
返回备忘录[键]=步骤
//已经访问
if(备注hasOwnProperty(键))
返回备忘录[键]
//标记为已访问
备注[键]=步骤
常数aFree=a-aState
常数bFree=b-b状态
返回步骤+Math.min(
//倒酒
aState?f(a,b,c,步骤+1,数学最大值(0,aState-bFree),数学最小值(aState+bState,b),备注):无限,
//把b倒进a
b状态?f(a,b,c,步骤+1,数学最小值(aState+bState,a),数学最大值(0,bState-aFree),memo):无限,
//把a倒入b
f(a,b,c,steps+1,Math.max(0,a-bFree),Math.min(a+b状态,b),memo),
//把b倒入a
f(a,b,c,步骤+1,Math.min(aState+b,a),Math.max(0,b-aFree),memo)
)
}
console.log(f(3,5,4))我不知道这是否正确,但这可能是一个开始。(注意,如果
gcd(a,b)
不除以c
,这可能会永远重复出现,如果c
等于a
或b
),我认为可能会有更有效的答案
函数f(a,b,c,步骤=0,aState=0,bState=0,memo={}){
常量键=[aState,bState]
//解决方案
if(图例包括(c))
返回备忘录[键]=步骤
//已经访问
if(备注hasOwnProperty(键))
返回备忘录[键]
//标记为已访问
备注[键]=步骤
常数aFree=a-aState
常数bFree=b-b状态
返回步骤+Math.min(
//倒酒
aState?f(a,b,c,步骤+1,数学最大值(0,aState-bFree),数学最小值(aState+bState,b),备注):无限,
//把b倒进a
b状态?f(a,b,c,步骤+1,数学最小值(aState+bState,a),数学最大值(0,bState-aFree),memo):无限,
//把a倒入b
f(a,b,c,steps+1,Math.max(0,a-bFree),Math.min(a+b状态,b),memo),
//把b倒入a
f(a,b,c,步骤+1,Math.min(aState+b,a),Math.max(0,b-aFree),memo)
)
}
console.log(f(3,5,4))
我不能在这里应用递归
-为什么不?你找到了解决问题的“算法”了吗?你有一些桶大小的数字吗?这是你正在尝试的问题吗。如果没有,你能提供一些例子吗?我不能在这里应用递归
-为什么不?你找到了答案了吗解决问题的“算法”你有一些桶大小的数字吗?这是你正在尝试的问题吗?如果没有,你能提供一些例子吗???