#include <stdio.h>
int factorial(int n) {
if (n == 0) {
return 1;
} else {
return n * factorial(n-1);
}
}
int main() {
int n;
scanf("%d", &n);
printf("%d! = %d\n", n, factorial(n));
return 0;
}
//当n等于3时
//该程序的运行流程是这样的 首先从主函数作为入口 输入n的值为3,然后进行下一条输出语句
//在输出语句调用了函数factorial 在该函数体中先判断 n是否为0 易知n不为0 则返回3*factorial(2)
//于是又回到函数factorial 判断2是否为0 易知n不为0 则返回2*factorial(1)
//于是又回到函数 factorial 判断1是否为0 易知n不为0 则返回 1*factorial(0)
//于是又回到函数 factoral 判断0是否为0 易知n为0 则返回1
//故factorial(0) = 1(返回值)
factorial(1) = 1*factorial(0)
factorial(2) = 2*factorial(1)
factorial(3) = 3*factorial(2) = 3*2*factorial(1) = 3*2*1*factorial(0) = 3*2*1*1 = 6
//即最终的输出结果为 3!=6
//该程序通过递归实现了计算n的阶乘的功能 在程序运行过程中函数不断调用自己。
通常递归用于排序和搜索,通过以上案例对递归有了初步的认识之后,我们来看一下,在复制粘贴文件夹的时候,如何通过递归将文件夹以及文件夹中的内容一并复制粘贴
在linux系统中 cp [-r] 参数1 参数2
-r选项,可选,用于复制文件夹使用,表示递归
这里的递归详细来讲,在 Unix/Linux 系统中,'cp' 命令用于复制文件或目录。当使用 'cp' 命令复制目录时,如果没有添加 '-r' 或 '-R' 选项,它将只复制目录本身,而不会复制目录内部的内容。
这是因为 'cp' 命令被设计为仅复制文件,而不是目录。目录在 Unix/Linux 系统中被视为特殊类型的文件,称为“文件夹”,它们包含其他文件和子目录的引用。因此,当使用 'cp' 命令复制目录时,实际上是在复制这个特殊的“文件夹”文件,而不是其中包含的文件和子目录。
而 '-r' 或 '-R' 选项告诉 'cp' 命令递归地复制目录及其所有内容。这意味着 'cp' 命令将遍历源目录的所有子目录和文件,并将它们复制到目标目录中。如果目标目录不存在,'cp' 命令会创建它。如果目标目录已经存在,'cp' 命令会将源目录的内容添加到目标目录中。
递归复制目录的过程是这样的:首先,'cp' 命令会复制源目录中的第一个文件到目标目录中。然后,它会检查源目录中是否有子目录。如果有,'cp' 命令会进入子目录,并在目标目录中创建一个相应的子目录,然后递归地复制子目录中的文件。这个过程会一直进行,直到复制完源目录中的所有文件和子目录。