Я пытался узнать SML NJ (стандартный ML Нью-Джерси), и я столкнулся с функцией, которую, как я понимаю, является рекурсией, но не могу точно понять почему функция возвращает значение, которое оно делает.Понимание функции sum, вызывающей себя (рекурсия?) - 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 + (сумма (п-1)), так что с учетом п = 2, (2 + (сумма (2-1)) => 2 + 1 = 3;
Но, учитывая n = 4, (4 + (сумма (4-1)) => 4 + 3 = 7, я не получаю значение что outputed программой.
Если кто-нибудь может объяснить мне, почему или где я думаю, неправильно, это было бы большим подспорьем, спасибо!
Да, правильно, я понимаю эту часть, но второе выражение, которое я немного смущен в aha –
См. Мой отредактированный ответ. – Prashant
Ну ладно, я думаю, я это понимаю! Огромное спасибо! –