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\)) —这是基本情况(递归的结束条件),第二行是到下一步的过渡。 
  <正文>
应该理解,函数调用涉及一些额外的开销,因此非递归阶乘计算会稍微快一些。 
结论:
如果您可以使用简单的迭代算法编写程序,无需递归,那么您就需要编写无递归的程序。但是,仍然存在一大类仅通过递归实现计算过程的问题。
另一方面,递归算法通常更容易理解。
 

Problem

 定义一个函数 K(n),返回给定自然数的位数 n: 


编写一个递归函数来计算自然数 n 的位数。

递归阶乘函数看起来像这样 以通常的非递归方式比较求阶乘的算法
int 阶乘(int n){ 如果 (n > 1) 返回 n * 阶乘(n - 1); 否则返回 1; x = 1; 对于 (i = 2; i <= n; i++) x = x * 我; printf("%d",x);
Write the program below
import java.util.Scanner;
public class Main {

static int CountDigit(int n)
{          
return 1+CountDigit(n/10);
}

public static void main(String[] args) {
     Scanner in = new Scanner(System.in);
     int n;
     n = in.nextInt();
     System.out.println(CountDigit(n));
   }      
}    

     

Program check result

To check the solution of the problem, you need to register or log in!