2014-10-03 24 views
0

我一直很想獲得遞歸的一些手,但我似乎誤解了它有人能解釋一下這個程序的工作嗎?

我讀過一本書中的問題,我有點困惑,我不想抽筋,我想要一些與堆棧堅實的解釋也即將連連調用的函數也

class rectest 
{ 
int values[]; 

rectest(int i) 
{ 
    values = new int[i]; 
} 

void printarray(int i) 
    { 
    if(i==0) 
     return ; 
    else printarray(i-1); 
    System.out.print(values[i-1]+" "); 
    } 
} 

public class recursion 
{ 
    public static void main(String args[]) 
    { 
    rectest ob = new rectest(10); 
    int i ; 
    for(i=0 ; i<10 ; i++) 
     ob.values[i] = i ; 
    ob.printarray(10); 
    } 
} 
+0

你能指出什麼是你不明白的嗎? – Tirath 2014-10-03 05:41:59

+0

輸出是這個..'0 1 2 ..'。我想理解這個輸出以及當'i == 0'和return語句被執行時會發生什麼? – amol 2014-10-03 05:47:26

+0

這是嘲笑,你問的結果,stackoverflow是他們嘗試的人。或具體的問題 – 2014-10-03 05:50:21

回答

1

遞推方式重複的東西調用

這是傳統的和重要的項目之一要學習如何 遞歸工作和?是遞歸和爲什麼 讓我來計算階乘 thier僞代碼會是這樣

功能因子的一個例子是:

input: integer n such that n >= 1 
output: [n × (n-1) × (n-2) × … × 1] 

    1. if n is >= 1, return [ n × factorial(n-1) ] 
    2. otherwise, return 1 

end factorial 

現在這裏所發生的是,它總是返回[N *階乘(N-1)],它稱自己一遍又一遍

現在讓我們考慮您的上下文

public class recursion 
    { 
     public static void main(String args[]) 
     { 
     rectest ob = new rectest(10); 

//這裏要初始化的對象並調用它的構造和intializing 10

int i ; 
for(i=0 ; i<10 ; i++) 
    ob.values[i] = i ; 

//這裏具有尺寸數組你喜歡在位置0值[0每一個成員變量分配給一個特定的值] = 0

ob.printarray(10); //這裏u的打印,你已經通過,現在重要的事情十個值的值,就會發生在這裏

}} 現在 看的printarray()方法 這裏

void printarray(int i) 
    { 
    if(i==0) 
     return ; 
    else printarray(i-1); 
//printarray(i-1) here it calls the method itself so as to print all the values recursively 
    System.out.print(values[i-1]+" "); 
    } 

完蛋了,如果你有更多的查詢問

+0

所以會發生什麼是在i == 0條件到來後,棧被清空,我們得到的o/p? – amol 2014-10-03 06:45:36

+1

在i == 0如果你看看你的printarray(int i)方法在if條件中,它檢查它並使其從else中退出,因爲如果在該條件下,如果它轉到else,它將printarray(-1)which是非法的,並使javaexcption或錯誤 – 2014-10-03 06:56:21

+0

它基本上沒有得到特定的位置 – 2014-10-03 06:57:10

0

如果你必須瞭解遞歸,你可以看看這個堆棧溢出問題。

如果你想更好地理解java中的遞歸實現,這裏是另一個堆棧溢出問題。 How is recursion implemented in Java

相關問題