2013-06-20 31 views
1

代碼的目的是爲了找到二項式係數(N,K) 我收到一個運行時錯誤需要幫助理解運行時錯誤的原因,以及如何解決它

import java.util.*; 

public class pract5ex11 { 
public static long combinRec (int n, int k){ 
    long answer; 
    if (k==0 || n==k) { 
      answer = 1; 
     } 
    else { 

     answer = combinRec(n-1,k)+combinRec(n-1,k-1); 

    } 
    return answer; 
} 

public static void main (String []args){ 
    Scanner s = new Scanner(System.in); 
    System.out.println("Enter first number"); 
    int n = s.nextInt(); 
    System.out.println("Enter second number, must be equal or greater"); 
    int k = s.nextInt(); 
    System.out.println(combinRec(n,k)); 

} 
} 

此外,我我很困惑某些點:_ java中的靜態和非靜態意義 命令中心線 關鍵字「this」在java中 如果有某些網站或引用通過它們來理解這些點我很感謝, 謝謝

+2

「*我收到一個運行時錯誤*」=>什麼錯誤?您可以發佈堆棧跟蹤,其中包含有用的信息,例如發生錯誤的行。 – assylias

+0

[Java教程](http://docs.oracle.com/javase/tutorial/)包含「學習Java語言」部分。 – assylias

回答

1

你有它扭轉:k應該更小/相等,否則你將有哪些

if (k == 0 || n == k) { 

從未進入導致StackOverflowError,因爲你與呼叫combinRec(n - 1, k)重複調用鏈,而沒有按不會改變k。因此,如果n < k和​​,那麼k == 0 || n == k永遠不會成立。 但是,如果是k < n,它最終將是真實的,因爲從n重複減去1最終會使nk相等。

+0

@ arshajii謝謝你,這很奇怪,雖然在這個問題上它特別提到「確保n小於k」 – user2283672

+0

@ user2283672很高興我能幫上忙。不要忘記[接受答案](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)。 – arshajii