亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

算法之走樓梯問題

算法之走樓梯問題

侃侃爾雅 2019-03-19 17:15:33
A 上樓梯時,B 從同一樓梯往下走。每次不一定只走 1 級,最多可以一次跳過 3 級(即直接前進 4 級)。但無論走多少級,1 次移動所需時間不變。兩人同時開始走,求共有多少種“兩人最終同時停在同一級”的情況(假設樓梯寬度足夠,可以相互錯開,不會撞上。另外,同時到達同一級時視為結束)。舉個例子,有 4 級樓梯的時候,結果共有 4 種情況.下面是我仿照作者例子中給的代碼寫的js版本。//走樓梯問題,遞歸方法求解.//來寫一個復制Number類型的函數function NumCopy(num) {    var copy = num-0;    return copy;}let N = 4, steps = 3, memo = {};function move(a, b) {    if([a, b] in memo) {        return memo[[a, b]];    }    if(a>b) {        return memo[[a, b]] = 0;    }    if(a == b) {        return memo[[a, b]] = 1;    }    if(b>a) {        for(let i=1; i<=steps; i++) {            for(let j=1; j<=steps; j++) {                cnt += move(NumCopy(a+i), NumCopy(b-j));            }        }    }    memo[[a, b]] = cnt;}let cnt = 0;console.log(move(0, N));這次又不知道哪錯了?
查看完整描述

2 回答

?
臨摹微笑

TA貢獻1982條經驗 獲得超2個贊

遞歸時尤其要注意 終止條件 和 條件分支的返回,沒有深讀你的代碼,我覺得應該是缺少了一個return


查看完整回答
反對 回復 2019-04-04
?
30秒到達戰場

TA貢獻1828條經驗 獲得超6個贊

let N = 10, steps = 4, memo = {};

function move(a, b) {

    if(a>b) {

        return memo[[a, b]] = 0;

    }

    if(a == b) {

        return memo[[a, b]] = 1;

    }

    let cnt = 0;

    for(let i=1; i<=steps; i++) {

        for(let j=1; j<=steps; j++) {

            cnt += move(a+i, b-j);

        }

    }

    memo[[a, b]] = cnt;

    return memo[[a, b]];

}

console.log(move(0, N));

有兩個地方寫錯了,第一處是let cnt = 0應寫在函數內,之后,要想輸出結果,應該給函數加個返回值。


查看完整回答
反對 回復 2019-04-04
  • 2 回答
  • 0 關注
  • 555 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號