了解 sum 函数调用自身(递归?)- SML
Understanding sum function calling itself (recursion?) - SML
我一直在尝试学习 SML NJ(新泽西州标准 ML),我遇到了一个我理解为递归的函数,但不太明白为什么函数 returns它的价值。
函数:
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;我没有得到程序输出的值。
如果有人能向我解释为什么或哪里我想错了,那将是很大的帮助,谢谢!
当程序说 sum(3) 时,它并不意味着 add 3
,它意味着将所有数字相加,包括 3,即 0+1+2+3 = 6
我不知道 SML NJ 是什么,但这是我的解释 -
|
接线员对我说,"Evaluate the first expression sum 0 = 0
. IF it is false, evaluate the second"。
当你想要第一个“0”整数的总和时,它只是 returns 0。任何超过它的东西都会计算该表达式的第二部分。
例子
- 前 0 个整数之和为 0。
- 前1个整数之和为(前0个整数之和,即0)+(1本身)= 1
- 前 2 个整数之和为(前 1 个整数之和,即 1)+(2 本身)= 3
- 等等...
前 n
个数字的总和是 n + sumOfFirst(n-1)
除非 n=0
在这种情况下它只是 0
,所以不要为递归而烦恼。这有意义吗?
希望对您有所帮助!
我一直在尝试学习 SML NJ(新泽西州标准 ML),我遇到了一个我理解为递归的函数,但不太明白为什么函数 returns它的价值。
函数:
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;我没有得到程序输出的值。
如果有人能向我解释为什么或哪里我想错了,那将是很大的帮助,谢谢!
当程序说 sum(3) 时,它并不意味着 add 3
,它意味着将所有数字相加,包括 3,即 0+1+2+3 = 6
我不知道 SML NJ 是什么,但这是我的解释 -
|
接线员对我说,"Evaluate the first expression sum 0 = 0
. IF it is false, evaluate the second"。
当你想要第一个“0”整数的总和时,它只是 returns 0。任何超过它的东西都会计算该表达式的第二部分。
例子
- 前 0 个整数之和为 0。
- 前1个整数之和为(前0个整数之和,即0)+(1本身)= 1
- 前 2 个整数之和为(前 1 个整数之和,即 1)+(2 本身)= 3
- 等等...
前 n
个数字的总和是 n + sumOfFirst(n-1)
除非 n=0
在这种情况下它只是 0
,所以不要为递归而烦恼。这有意义吗?
希望对您有所帮助!