递归是一种调用函数本身的技术。该技术提供了一种将复杂问题分解为更容易解决的简单问题的方法。
递归可能有点难以理解。弄清楚它是如何工作的最好方法就是进行实验。
将两个数字相加很容易,但将一系列数字相加则更复杂。在以下示例中,递归用于将一系列数字相加,将其分解为将两个数字相加的简单任务:
使用递归将 10 以内的所有数字相加。
public class Main { public static void main(String[] args) { int result = sum(10); System.out.println(result);
}public static int sum(int k) { if (k > 0) { return k + sum(k - 1); } else { return 0;
}}
}
当。。。的时候sum()
函数被调用,它添加参数k
小于所有数字的总和k
并返回结果。当 k 变为 0 时,该函数仅返回 0。运行时,程序执行以下步骤:
由于该函数在以下情况下不会调用自身k
为 0 时,程序停止并返回结果。
正如循环可能会遇到无限循环问题一样,递归函数也可能会遇到无限递归问题。无限递归是指函数永远不会停止调用自身。每个递归函数都应该有一个停止条件,即函数停止调用自身的条件。在前面的示例中,停止条件是当参数k
变为0。
查看各种不同的示例有助于更好地理解这个概念。在此示例中,该函数在开始和结束之间添加一系列数字。该递归函数的停止条件是结尾不大于开始:
使用递归将 5 到 10 之间的所有数字相加。
public class Main { public static void main(String[] args) { int result = sum(5, 10); System.out.println(result);
}public static int sum(int start, int end) { if (end > start) { return end + sum(start, end - 1); } else { return end; } } }
开发人员应该非常小心递归,因为很容易编写一个永远不会终止的函数,或者使用过量内存或处理器能力的函数。然而,如果正确编写,递归可以是一种非常高效且数学上优雅的编程方法。
截取页面反馈部分,让我们更快修复内容!也可以直接跳过填写反馈内容!