递归函数第 1 部分
本课属于 Coddy GDScript 学习旅程的“逻辑与流程”单元。第 57 课,共 78 课。
递归函数是调用自身的函数。每次调用都会解决一个更小的问题,直到问题足够简单,可以直接解答。
这个函数会把从 1 到 n 的所有整数相加:
func sum_to_n(n: int) -> int:
if n == 0: # 递归终止条件
return 0
return n + sum_to_n(n - 1) # 递归步骤它有两个部分:
- 基本情况不再调用函数就能得出答案:加到
0的和是0。 - 递归步骤使用更小的值
n - 1调用函数,并根据结果得出答案。
sum_to_n(3) 等于 3 + sum_to_n(2),也就是 3 + 2 + sum_to_n(1),也就是 3 + 2 + 1 + sum_to_n(0)。基本情况返回 0,等待中的调用会一个接一个地完成:结果是 6。
每一步递归都必须更接近基准情形。如果没有基准情形,或者步骤像 n + 1 这样永远无法到达基准情形,函数就会不断调用自身。Godot 允许最多约 1,000 层嵌套调用,然后会报错并停止程序。
挑战
简单程序读取一个整数 n(大于或等于 0),并调用 count_down(n)。
在 _ready() 下方,编写一个带有一个参数的递归函数 count_down。它从参数的值开始倒数到 0,每行打印一个数字。不要使用循环:函数先打印当前数字,再用下一个更小的数字调用自身。
输入 3 时,输出为:
3
2
1
0亲手试试
extends Node
func _ready():
var n := int(OS.read_string_from_stdin())
count_down(n)
# 在下方编写递归函数 count_down(n)。
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
逻辑与流程中的所有课
自己练习: GDScript 在线编译器