函数不可以调用自己。
答案B。函数必须有函数名。函数可以没有参数,可以没有返回值(void类型),定义可以在调用之后(需提前声明)。
函数必须有名称,但可以有默认参数。参数默认以值传递(传值)。函数未被调用时参数不占内存。
【考点】递归函数|函数调用机制|算法基础
考纲定位:本题卡在《GESP 算法与程序设计》四级"递归函数"模块核心概念上。命题人故意用"不可以"这种绝对化表述卡住——死记硬背的学生会误以为函数调用必须依赖外部函数,却忽略了递归是函数调用自己的根本机制。这道题筛选掉的是对基本概念理解不牢的考生。
解题思维:关键观察是"递归定义的本质就是用自身定义自身"。函数声明后,只要存在终止条件(递归基)和递推关系,调用自己就是合法且必要的。例如经典的阶乘函数:int f(int n){ if(n==0) return 1; return f(n-1)*n; },这里 f 调用 f 不是语法错误而是功能必需。此类题通法:遇到"函数能否调用自己"先想"递归基 + 递归递推"是否成立,成立则必可调用。
陷阱拆解:错误选项A利用"函数调用栈"的朴素直觉——学生以为调用自己会死循环或栈溢出,但实际递归必须有终止条件。题目中"不可以"是绝对化陷阱,只要有一个合法递归实例就能推翻它。更阴险的是,它偷换了"调用"的定义:函数调用自己不是"循环调用",而是"递归调用",这是两个完全不同的概念。
反命题思维:若把"不可以"改成"必须调用",则答案变成A(正确),因为递归确实必须调用自身;若改成"可以调用但不允许无限调用",则答案仍是B(错误),因为无限调用是合法的,只是需要基条件。刷到此类题先问:"命题人想考我递归的哪个定义环节?"