第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

遞歸問題,因?yàn)榫€程掛起

遞歸問題,因?yàn)榫€程掛起

函數(shù)式編程 2022-09-01 16:27:52
我在Java中玩了一些練習(xí)問題。我為下面給出的程序編寫了一個(gè)遞歸程序。我的解決方案是正確的,除了掛起(我相信)恢復(fù)到活動(dòng)狀態(tài)并更改遞歸方法的值。我還在調(diào)試模式下添加了 Eclipse 的屏幕截圖,其中顯示了線程堆棧。package com.nix.tryout.tests;/** * For given two numbers A and B such that 2 <= A <= B, * Find most number of sqrt operations for a given number such that square root of result is a whole number and it is again square rooted until either the  * number is less than two or has decimals.  * example if A = 6000 and B = 7000, sqrt of 6061 = 81, sqrt of 81 = 9 and sqrt of 9 = 3. Hence, answer is 3 *  * @author nitinramachandran * */public class TestTwo {    public int solution(int A, int B) {        int count = 0;        for(int i = B; i > A ; --i) {            int tempCount = getSqrtCount(Double.valueOf(i), 0);            if(tempCount > count) {                count = tempCount;             }        }        return count;    }    // Recursively gets count of square roots where the number is whole    private int getSqrtCount(Double value, int count) {        final Double sqrt = Math.sqrt(value);        if((sqrt > 2) && (sqrt % 1 == 0)) {            ++count;            getSqrtCount(sqrt, count);        }        return count;    }    public static void main(String[] args) {        TestTwo t2 = new TestTwo();        System.out.println(t2.solution(6550, 6570));    }} 上面的屏幕截圖來自我的調(diào)試器,我已經(jīng)圈出了線程堆棧。任何人都可以嘗試運(yùn)行該程序,并讓我知道問題是什么以及解決方案是什么?我可以想出一個(gè)非遞歸解決方案。
查看完整描述

2 回答

?
寶慕林4294392

TA貢獻(xiàn)2021條經(jīng)驗(yàn) 獲得超8個(gè)贊

你的代碼是錯(cuò)誤的,你應(yīng)該有

return getSqrtCount(sqrt, count);

而不是

getSqrtCount(sqrt, count);

否則,遞歸是毫無意義的,你完全忽略了遞歸的結(jié)果。


查看完整回答
反對 回復(fù) 2022-09-01
?
繁星淼淼

TA貢獻(xiàn)1775條經(jīng)驗(yàn) 獲得超11個(gè)贊

您的遞歸是錯(cuò)誤的,因?yàn)?在任何情況下,或者即使它深入到遞歸調(diào)用中,也會(huì)返回 的值。Java是按值傳遞的,這意味著修改方法內(nèi)部的基元的值在該方法之外將不可見。為了糾正這一點(diǎn),我們可以編寫以下遞歸:count01


private int getSqrtCount(Double value) {


    final Double sqrt = Math.sqrt(value);


    if((sqrt > 2) && (sqrt % 1 == 0)) {

        return getSqrtCount(sqrt) + 1;

    }

    return 0;

}


查看完整回答
反對 回復(fù) 2022-09-01
  • 2 回答
  • 0 關(guān)注
  • 91 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)