簡體   English   中英

遞歸方法和堆棧溢出

[英]Recursive method and stack overflow

好的,所以我有一個任務來確定一只猴子爬上x高度的桿需要多長時間。 如果在10分鍾內上升10英尺,在休息時在10分鍾內滑落3英尺。 當它到達桿的頂部時它停止,並且每分鍾爬上一英尺。 這是使用recurssion,我的方法是正確的,但我得到堆棧溢出,我不知道如何避免它所以即時通訊,任何想法?

多謝你們

public static long climb(long height, long time) {    //Recursive method

    if (height <= 0)     //base case
        return time;

/*Every 10 min add 3 to height (notice im doing it backwards, 
instead of substracting 3.
I find it easier to deal with this way and easier to implement the base case) *//

    else if (time != 0 && time % 10 == 0) {    

        return climb(height+3, time+10);
    }

    else  {
        return climb(height-1, time+1);

    } } }

你不能這樣做。 這兩行可能有問題:

else if (time != 0 && time % 10 == 0) {    

    return climb(height+3, time+10);
}

如果您遇到的情況是時間是例如10,那么您將為時間變量添加10並且最終為20,因此20%10將再次成為真實的:)

編輯:\\

該死的,有點太晚了:)

另一個編輯:

要避免此問題,請為參數添加提醒:

    public static long Climb(long height, long time, bool justrested)
    {
        //Recursive method
        if (height <= 0)
        {
            //base case
            return time;
        }

        if(time%10 == 0 && !justrested)
        {
            return Climb(height + 3, time + 10, true);
        }

        return Climb(height - 1, time + 1, false);
    }

您可以像現在這樣調用它:

Climb(1800, 0, true);

可能會有一些錯誤,但無論如何都希望你。

內存填滿時會發生堆棧錯誤,即此處的問題是您沒有正常工作的退出語句。

嘗試將此更改為長

if (height <= 0L) 

它可能會解決這個問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM