簡體   English   中英

即使條件為true,Return語句也不會中斷

[英]Return statement doesn't break out of block, even though condition is true

這是一個簡單的程序,用於檢查斐波那契是否為數字。 我有一個神秘的錯誤:“ return true”語句未觸發。 相反,“ hi”將被打印多次。 回報應該突破這種方法,有誰知道為什么不這樣做? 謝謝!

import java.util.*;
public class Solution {

public static boolean listFibs (long oldestFib, long oldFib, long input) {
    long newFib = oldestFib + oldFib;

    while (newFib < Math.pow(10,10)) {

        if (newFib == input) {
            System.out.println("hi");
            return true;
        }

        listFibs(oldFib, newFib, input);
    }

    return false;  
}


public static void main(String[] args) {
    /*Scanner in = new Scanner(System.in);
    int testCases = in.nextInt();
    for (int i = 0; i < testCases; i++) {
        int a = in.nextInt();
        System.out.println("A=  " + a);
        System.out.println(listFibs(0, 1, a));
    }*/

    System.out.println(listFibs(0, 1, 5));

}}

由於遞歸, listFibs有很多形式。 return只剩下其中之一。

在給出的示例中,您得到以下調用:

listFib(0,1,5)
  listFib(1,1,5)
    listFib(1,2,5)
      listFib(2,3,5)
      -> true
      listFib(2,3,5) // called again due to the loop
      -> true
      listFib(2,3,5) // called again due to the loop
      -> true
      listFib(2,3,5) // called again due to the loop
      -> true
      listFib(2,3,5) // called again due to the loop
      ...

實際上,如果多次打印“ hi”,則return語句必須同時執行。 如果在該return語句中安裝斷點,則會看到。
您的函數是recursion ,“ listFibs”將被多次調用。

打印方法中所有3個變量的值,您將知道出了什么問題。 您正在使用遞歸,請查看它被調用了多少次。

同樣,在調用listFib ,執行將再次轉到while循環。 您至少需要說return listFibs listFibs和while循環條件之間,沒有任何變化。 2,3,5被一次又一次地發現。

看到http://ideone.com/1d440f

您只差了一步...遞歸調用對從listFibs獲得的結果不執行任何操作,因此程序將看到如下內容:

while (newFib < Math.pow(10,10)) {

    if (newFib == input) {
        System.out.println("hi");
        return true;
    }

    true //or false
}

嘗試添加此多余的IF語句。 一旦找到正確的結果,它將被返回鏈上並從函數中傳遞出去。

while (newFib < Math.pow(10,10)) {

    if (newFib == input) {
        System.out.println("hi");
        return true;
    }

    if listFibs(oldFib, newFib, input){
        return true;
    }
}

暫無
暫無

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

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