Sign in
or
Register
Courses
Textbook
Compiler
Contests
Topics
Courses
爪哇。 基本
(Java) 子程序。递归。
Module:
(Java) 子程序。递归。
Problem
5
/10
递归和迭代
Theory
Click to read/hide
要理解递归,你需要理解递归...
迭代
在编程中—从广义上来说——数据处理的组织,其中的动作重复多次,而不会导致对自身的调用(不像 %BA%D1%83%D1%80%D1%81%D0%B8%D1%8F" title="Recursion" >递归)。狭义上——一步循环数据处理过程。
当前步骤(迭代)的迭代算法通常使用在先前步骤计算的相同操作或动作的结果。 此类计算的一个例子是递归关系的计算。
递归值的一个简单示例是阶乘:
\(N!=1 \cdot 2 \cdot 3 \cdot \ ... \ \cdot N\)
每一步(迭代)的值的计算是
\(N=N \cdot i\)
。 在计算
\(N\)
的值时,我们取已经存储的值
\(N\)
>.
一个数的阶乘也可以用
递归公式
来描述:
你可能会注意到这个描述只不过是一个递归函数。
这里是第一行 (
\(n <= 1\)
) —这是基本情况(递归的结束条件),第二行是到下一步的过渡。
<正文>
递归阶乘函数看起来像这样
以通常的非递归方式比较求阶乘的算法
int 阶乘(int n){ 如果 (n > 1) 返回 n * 阶乘(n - 1); 否则返回 1;
x = 1; 对于 (i = 2; i <= n; i++) x = x * 我; printf("%d",x);
表>
应该理解,函数调用涉及一些额外的开销,因此非递归阶乘计算会稍微快一些。
结论:
如果您可以使用简单的迭代算法编写程序,无需递归,那么您就需要编写无递归的程序。但是,仍然存在一大类仅通过递归实现计算过程的问题。
另一方面,递归算法通常更容易理解。
Problem
定义一个函数 K(n),返回给定自然数的位数 n:
编写一个递归函数来计算自然数 n 的位数。
Запрещенные операторы: for;while;until
1000
ms
32 Mb
Rules for program design and list of errors in automatic problem checking
Teacher commentary