Menu
CoddyTech

递归函数第 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 层嵌套调用,然后会报错并停止程序。

challenge icon

挑战

简单

程序读取一个整数 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)。
quiz icon自我测试

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

逻辑与流程中的所有课

自己练习: GDScript 在线编译器