Рекурсия является очень важной концепцией в разработке программного обеспечения. Я не знаю схемы (petit chez), поэтому подхожу к этому с общей точки зрения.
Концепция рекурсивной функции заключается в том, чтобы повторять одну и ту же задачу снова и снова, пока вы не достигнете некоторой предельной границы. Принимая ваш первый вопрос, у вас есть два числа, и вам нужно сложить их вместе. Однако у вас есть возможность только добавить 1 к числу или вычесть 1 из числа. У вас также есть буквальное значение ноль.
Итак. считать вас числами как два ведра. У каждого из них есть 10 камней. Вы хотите «сложить» эти два ведра вместе. Вам разрешается перемещать только один камень за раз (то есть вы не можете взять горсть или опрокинуть одно ведро в другое).
Допустим, вы хотите переместить все из левого ведра в правое ведро, по одному камню за раз. Что ты собираешься делать?
Сначала вы должны взять 1 камень из левого ведра, т. Е. Вы используете sub1
для удаления одного камня из ведра. Затем вы добавляете тот же камень в правое ведро, то есть вы add1
в правое ведро.
Теперь вы можете сделать это в цикле, но вы не знаете, сколько камней будет в любом данном решении. Что вы действительно хотите сделать, так это сказать: «Возьмите один камень из левого ведра, положите его в правое ведро и повторяйте, пока в левом ведре не останется камней». Этот случай отсутствия камней в левом ведре называется «Базовый случай». Это тот момент, когда вы говорите «ОК», я закончил.
Примером такой ситуации может служить псевдокод (используя ваш плюс, add1, sub1 и ноль):
plus(leftBucket, rightBucket)
{
if(leftBucket == zero) // check if the left bucket is empty yet
{
// the left bucket is empty, we've moved all the stones
return rightBucket; // the right bucket must be full
}
else
{
// we still have stones in the left bucket, remove 1,
// put it in the right bucket, repeat.
return plus(sub1(leftBucket), add1(rightBucket));
}
}
Если вам все еще нужна дополнительная помощь, дайте мне знать, я могу пробежаться по другим примерам, но похоже, что это, вероятно, проблема с домашней работой, и рекурсия невероятно важна для понимания, поэтому я не хочу просто давать вам все ответы.