要理解递归,你需要理解递归...
迭代
在编程中—从广义上来说——数据处理的组织,其中的动作重复多次,而不会导致对自身的调用(不像 %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);
|
表>
应该理解,函数调用涉及一些额外的开销,因此非递归阶乘计算会稍微快一些。
结论: 如果您可以使用简单的迭代算法编写程序,无需递归,那么您就需要编写无递归的程序。但是,仍然存在一大类仅通过递归实现计算过程的问题。
另一方面,递归算法通常更容易理解。
您可能会发现此信息很有用:
英文字母'\(A\)'代码为 65
进入
\(char \ c = 65;\) 在变量\(c\)中存储一个英文字母span> \(A\)
因此,您可以通过其代码获得所需的字母
|