递归函数第 2 部分
本课属于 Coddy GDScript 学习旅程的“逻辑与流程”单元。第 58 课,共 78 课。
每个递归函数都包含相同的两部分:
- 基本情况说明何时停止。
- 递归步骤使用更小的输入调用函数。
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挑战
简单编写一个名为 fibonacci 的递归函数,它接受一个正整数 n,并返回第 n 个斐波那契数:
fibonacci(1)是0fibonacci(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
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
逻辑与流程中的所有课
自己练习: GDScript 在线编译器