Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 递归:最小的步骤数_Javascript_Node.js_Recursion - Fatal编程技术网

Javascript 递归:最小的步骤数

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

我必须编写一个递归程序来解决这个问题:

你被分配到两个空桶,分别为“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); 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))
我不能在这里应用递归
-为什么不?你找到了解决问题的“算法”了吗?你有一些桶大小的数字吗?这是你正在尝试的问题吗。如果没有,你能提供一些例子吗?
我不能在这里应用递归
-为什么不?你找到了答案了吗解决问题的“算法”你有一些桶大小的数字吗?这是你正在尝试的问题吗?如果没有,你能提供一些例子吗???