2016-09-15 37 views
0

需要此問題的幫助,我在遞歸方面非常糟糕。我需要編寫,做了此方法:在Java中遞歸地定義一個序列

輸入變量X爲1和50。該函數應返回爲Y通過遞歸定義的序列的第X個術語之間的整數:

f(1) = 1 f(2) = 3 f(X) = 2*f(X-1) – 2*f(X-2) for X = 3,4,5,...

你的功能代碼應該使用遞歸(不是循環)

TBH我甚至不知道從哪裏開始。任何幫助,將不勝感激。這裏是我當前的代碼:

package p1parta; 

import java.util.Scanner; 

public class RecursiveSeq 
{ 
    public static void main(String args[]) 
    { 
     System.out.println("Please enter a number:"); 
     Scanner input = new Scanner(System.in); 

     int x = input.nextInt(); 

     System.out.println(sequence(x)); 
    } 

    public static int sequence(int x) 
    { 
     if(x == 1){ 
      return 1; 
     } 
     if (x == 2){ 
      return 3; 
     } 
     return 2 * sequence(x - 1) - 2 * sequence(x - 2); 
    } 
} 

我試圖執行所示的解決方案,但輸出我從程序獲得不匹配什麼,我用手計算。事實上,只是測試輸入3,4,5和6唯一匹配的是5

+0

從實施基本案例開始 - 「如果x是1,則返回1;如果是2,則返回3」。然後,執行遞歸步驟 - 「否則返回2 * f(X-1) - 2 * f(X-2)」。更重要的是,這個問題很廣泛,因爲它沒有告訴我們你遇到的哪些概念有問題。 – yshavit

+0

列出你期望的和你得到的。例如,對於輸入3,該算法將返回2 * 3 - 2 * 1 = 4.您說你認爲4對於輸入3是錯誤的結果?那麼你期望什麼? –

+0

似乎你沒有嘗試單獨進行調試。堆棧溢出不會爲你調試程序,除非你已經顯示出努力調試自己。 https://ericlippert.com/2014/03/05/how-to-debug-small-programs/ –

回答

2

你的問題是遞歸的完美用例。一般來說,遞歸模式是:

func(context) 
    if simple case 
     return simple answer 
    else 
     call func(simpler context) 
     and return combined results 

如果您遇到問題,請嘗試使用此模式並返回。

+0

我試圖實現這個解決方案,但我從程序中得到的輸出與我手工計算的結果不匹配。事實上,只是測試輸入3,4,5和6唯一匹配的是5. – GrumpyWizard

+1

@yshavit這是一個公平點。我將刪除代碼並留下提示 – sprinter

+0

@GrumpyWizard你應該自己去實現它,然後調試,如果你無法正常工作,請回答問題。 – sprinter