簡體   English   中英

有人可以向我解釋這個功能是如何工作的嗎? (遞歸)

[英]Could someone explain to me how this function works? (recursion)

public static void main(string[]args) {
    system.out.println(sum5(10));
}
public static void sum5(int n) {
    if (n == 0) return 0;
    return sum5(n - 1) + n;
}

這個函數的結果是55。這個方法是怎么工作的?

本質上這是從 1 到 n 的總和

sum5(3)基本上計算 (3 + 2 + 1)

想想它在計算機中的樣子,我會用sum5(3)

call sum5(3)
 1. n != 0 thus return sum5(2) + 3
 2. n != 0 thus return sum5(1) + 2
 3. n != 0 thus return sum5(0) + 1
 4. n == 0 thus return 0
 now we go back up
 sum5(1) = sum5(0) + 1 => 1 | sum5(0) = 0 from last step.
 sum5(2) = sum5(1) + 2 => 3 | sum5(1) = 1 from last step.
 sum5(3) = sum5(2) + 3 => 6 | sum5(2) = 3 from last step.

PS 為了理解遞歸,你必須首先理解遞歸雙關語的意圖。

在自然語言中,該函數返回其參數加上對自身調用的值,參數減 1 - 其前身。

這給你 10 + 9 + 8 + 7 + 6 + 5 + 4 + 3 + 2 + 1 + 0 = 55

這是非常基礎的東西,你應該在一些介紹性的計算機科學書籍中閱讀遞歸。

暫無
暫無

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

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