【发布时间】:2016-01-03 19:37:57
【问题描述】:
我一直在尝试学习 SML NJ(标准 ML New Jersey),并且遇到了一个我理解为递归的函数,但不能完全弄清楚为什么该函数会返回它所做的值。
功能:
fun sum 0 = 0 | sum n = n+sum (n-1);
我知道如果 sum 的值为 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;
我相信它应该计算如下: sum n = (n + (sum(n-1)), 所以给定 n = 2, (2 + (sum(2-1)) => 2 + 1 = 3 ;
但是,给定 n = 4 , (4 + (sum(4-1)) => 4 + 3 = 7; 我没有得到程序输出的值。
如果有人可以向我解释我为什么或哪里想错了,那将是很大的帮助,谢谢!
【问题讨论】:
标签: function recursion sml smlnj