递归函数
本课属于 Coddy PHP 学习旅程的“逻辑与流程”单元。第 8 课,共 68 课。
递归是一种编程技巧,函数通过调用自身来解决问题。这会产生类似循环的行为,但函数不是使用传统循环,而是不断使用修改后的参数调用自身,直到找到答案。
每个递归函数都必须包含两个基本组成部分,才能正确运行:
基本情况:这是停止递归的条件。如果没有它,函数就会无限次调用自身,导致程序崩溃。基本情况定义了函数何时应该返回结果,而不是再次调用自身。
递归步骤:在这一步中,函数会用经过修改的原始问题调用自身,并逐渐接近基准情况。
下面是一个计算阶乘的递归函数的简单示例:
<?php
function factorial($n) {
// 递归终止条件:1 的阶乘是 1
if ($n <= 1) {
return 1;
}
// 递归步骤:n! = n * (n-1)!
return $n * factorial($n - 1);
}
echo factorial(5); // 输出:120
?>在这个示例中,factorial(5) 调用 factorial(4),后者又调用 factorial(3),以此类推,直到调用到 factorial(1)(基本情况)。然后结果逐层相乘:1 × 2 × 3 × 4 × 5 = 120。
挑战
简单创建一个名为 sumDigits 的递归函数,接收一个正整数并返回它各位数字之和。该函数应使用递归逐位拆分这个数字。
你将收到一个输入:一个正整数。读取输入,使用这个数字调用你的递归函数,并输出它各位数字之和。
输入格式:一行,包含一个正整数
预期输出:该数字所有位数的总和
亲手试试
<?php
// 读取输入
$number = intval(fgets(STDIN));
// TODO:在这里创建递归函数 sumDigits
// 调用函数并输出结果
echo sumDigits($number);
?>这节课包含一个小测验。开始学习即可作答,并记录你的进度。
逻辑与流程中的所有课
自己练习: PHP 在线编译器