从最一般的意义上讲,递归是一个基于分解工作的概念,然后将较小的工作分派给自己的副本。为了使递归正常工作,您需要三件事:
- 工作细目。您如何使每个步骤变得“简单”?
- 递归调用。在某些时候,您的函数必须自行调用,但要减少“工作”。
- 基本情况。什么是(通常不重要的)最终案例,它将终止递归过程?
在您的情况下,您正在尝试创建
min对列表进行操作的函数。您的想法是正确的,您可以通过使列表每次变小(以第一个元素为子列表)来减少(分解)工作。正如其他人提到的那样,该想法将是对照“列表的其余部分”检查第一个元素(刚刚删除的元素)。好了,这就是信仰突飞猛进的地方。在这一点上,您可以“假设”您的
min函数将在子列表上运行,而只需在子列表上进行函数调用(递归调用)。现在,您必须确保所有呼叫都将返回(即,确保不会永远递归)。这就是您的基本案例的来源。如果列表大小为1,则唯一元素是列表中最小的元素。无需致电
min再次,只需返回(您在原始帖子中已经拥有的那一部分)即可。



