2015-10-06 94 views
0

我一直在試圖學習SML NJ(標準ML新澤西州),我遇到了一個函數,我明白是遞歸,但不能完全圖爲什麼函數返回它所做的值。瞭解總和函數調用自己(遞歸?) - SML

功能:

fun sum 0 = 0 | sum n = n+sum (n-1); 

我明白,如果和的值是0,那麼將返回0。但是,我不明白第二部分是如何工作的。

測試功能:

Input: sum 0; ---> output: 0; 
Input: sum 1; ---> output: 1; 
Input: sum 2; ---> output: 3; 
Input: sum 3; ---> output: 6; 
Input: sum 4; ---> output: 10; 

我相信它應該計算如:總和N =(N +(總和(N-1)),所以給定的n = 2,(2 +(SUM(但是,給定n = 4,(4+(sum(4-1))=> 4 + 3 = 7;我沒有得到該值這是由程序輸出

如果任何人可以向我解釋爲什麼或我在哪裏想錯了,那將是很大的幫助,謝謝你

回答

1

當程序說總和(3),這並不意味着add 3,這意味着添加所有的數字直到幷包括3即0 + 1 + 2 + 3 = 6

我不知道SML NJ是,但這裏是我的解釋 -

運營商|對我說,「評估第一個表達式sum 0 = 0。如果是假的,「當你想第一的總和。

‘0’的整數計算第二個,它只是返回0。任何事情了,它計算該表達式的第二部分。

  1. 第一0的整數的總和是0。
  2. 第一1個整數的總和是(第一個0的整數的總和,即,0)+(1本身)= 1
  3. 第一2個整數的總和是(總和前1個整數,即1)+(2本身)= 3
  4. 等等...

第一n數之和是n + sumOfFirst(n-1)除非n=0在這種情況下,它只是0,所以不要打擾遞歸。那有意義嗎?

希望有幫助!

+0

是的正確,我理解那部分,但第二個表達我有點困惑在aha –

+0

請看我編輯的答案。 – Prashant

+1

啊好吧,我想我明白了!非常感謝! –