Menu
CoddyTech

递归函数第 2 部分

本课属于 Coddy GDScript 学习旅程的“逻辑与流程”单元。第 58 课,共 78 课。

每个递归函数都包含相同的两部分:

  1. 基本情况说明何时停止。
  2. 递归步骤使用更小的输入调用函数。

n 的阶乘是 n * (n - 1) * ... * 1,所以 n 的阶乘等于 n 乘以 n - 1 的阶乘:

func factorial(n: int) -> int:
	if n == 1: # 递归终止条件
		return 1
	return n * factorial(n - 1) # 递归步骤

factorial(5) 调用 factorial(4),后者又调用 factorial(3),一直到 factorial(1),它会返回 1。返回时,每次调用都会进行乘法运算:结果是 120。

更小的输入不一定是更小的数字。更短的字符串也可以。这个函数会反转字符串:

func reverse_text(text: String) -> String:
	if text.length() <= 1: # 递归的终止条件
		return text
	return reverse_text(text.substr(1)) + text[0]

text.substr(1) 是去掉第一个字符后的字符串。函数会反转这个较短的字符串,并在末尾添加第一个字符。长度为 0 或 1 的字符串已经是反转后的结果,因此这是基本情况。

print(reverse_text("hello"))
olleh
challenge icon

挑战

简单

编写一个名为 fibonacci 的递归函数,它接受一个正整数 n,并返回第 n 个斐波那契数:

  • fibonacci(1) 是 0
  • fibonacci(2) 是 1
  • 当 n > 2 时,fibonacci(n) 是 fibonacci(n - 1) + fibonacci(n - 2)

例如,fibonacci(6) 返回 5(数列从 0,1,1,2,3,5 开始)。

测试会自行调用 fibonacci()。不要调用它,也不要打印任何内容。

亲手试试

func fibonacci(n: int):
	# 在这里编写代码
	pass
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

逻辑与流程中的所有课

自己练习: GDScript 在线编译器