5 函数(递归部分)
函数的定义与使用

函数的定义与使用函数的定义与使用函数是计算机编程中的重要概念,作为一种可重复使用的代码块,函数能够接受输入参数并返回输出结果,从而可以简化程序的编写,提高程序的可读性和可维护性。
本文将简要介绍函数的定义与使用。
一、函数的定义函数是一段预定的代码块,用于完成特定的任务或计算。
函数通常由输入参数、函数体和输出结果三部分组成。
其中输入参数用于传递外部数据给函数,函数体是实现具体功能的代码,输出结果则是函数执行完毕后返回给调用者的值。
函数的定义通常由以下几个部分组成。
1.函数名函数名是函数的唯一标识符,用于区分不同的函数。
函数名通常使用有意义的英文单词或短语,以便于程序员理解和记忆。
函数名的命名应该遵循编程语言的命名规范,通常采用驼峰法(Camel Case)或下划线法(Snake Case)。
2.函数参数函数参数是函数输入的数据。
参数可以是任何数据类型,包括基本类型和自定义类型。
函数可以有一个或多个参数,参数之间以逗号分隔。
参数可以有默认值,如果在调用函数时不指定参数值,则使用默认值。
例如,在Python中定义一个名为“add”的函数,其参数为两个整数a和b,函数实现为返回a+b的和,如下所示。
def add(a=0, b=0):return a + b3.函数返回值函数返回值是函数执行完毕后返回的结果。
返回值可以是任何数据类型,包括基本类型和自定义类型。
函数可以返回一个或多个返回值,通过在函数体中使用return语句来指定。
如果函数没有返回值,则返回None。
例如,在Python中定义一个名为“calculate”的函数,其参数为两个整数a和b,函数实现为返回a+b和a-b的结果,如下所示。
def calculate(a, b):return a+b, a-b二、函数的使用函数的使用具有很高的灵活性,可以在不同的环境和场景中使用。
下面介绍几种常见的函数使用方法。
1.函数的定义和调用函数的定义包括函数名、函数参数和函数体,可以在代码的任何位置定义。
递归和尾递归 (图解+实例)

1 如果 n=0,n=1f(n)=nf(n) 如果 n>1图1:以递归的方式计算4的阶乘上图(1)展示了利用递归计算4!的过程。
它也说明了递归过程中的两个基本阶段:递推和回归。
在递推阶段,每一个递归调用通过进一步调用自己来记住这次递归过程。
当其中有调用满足终止条件时,递推结束。
比如,在计算n!时,终止条件是当n=1和n=0,此时函数只需简单的返回1即可。
每一个递归函数都必须拥有至少一个终止条件;否则递推阶段永远不会结束了。
一旦递推阶段结束,处理过程就进入回归阶段,在这之前的函数调用以逆序的方式回归,直到最初调用的函数为止,此时递归过程结束。
以递归的方式计算n的阶乘的函数实现:C函数fact的工作方式如下:它接受一个整数n作为参数,如果n小于0,该函数直接返回0,这代表一个错误。
如果n等于0或1,该函数返回1,这是因为0!和1!都等于1,以上是终止递归的条件。
否则,函数返回n-1的阶乘的n倍。
而n-1的阶乘又会以递归的方式再次调用fact来计算,如此继续。
代码实例(1):fact.c1/*fact.c*/2#include "fact.h"3int fact(int n){4if (n<0)5return0;6else if(n==0)7return1;8else if(n==1)9return1;10else11return n*f(n-1);12}为理解递归究竟是如何工作的,有必要先看看C语言中函数的执行方式。
我们先来看看C程序在内存中的组织方式(见图2-a)。
基本上,一个可执行程序由4个区域组成:代码段、静态数据区、堆与栈。
代码段包含程序运行时所执行的机器指令。
静态数据区包含在程序生命周期内一直持久的数据,比如全局变量和静态局部变量。
堆包含程序运行时动态分配的存储空间,比如malloc分配的内存。
栈包含函数调用的信息。
当C中调用了一个函数时,栈中会分配一块空间来保存与这个调用相关的信息。
C语言程序设计教程(第5章 函数)

22
信息科学与工程学院
作用域(可用域)与生存期
C语言中定义的变量都有一个起作用的范 围,称为变量的作用域。 程序运行时,变量被创建和被删除的时间 段,称为变量的生存期。
23
信息科学与工程学院
局部变量和全局变量
在一个函数内部定义的变量是内部变量, 它只在本函数内部范围内有效。也就是说 只有在本函数内才能使用它们。这些变量 称为“局部变量”。 在函数之外定义的变量称为外部变量,也 称为全局变量,在文件内的所有函数都能 使用它。它的有效范围为从定义变量的位 置开始到文件的结束。
4
信息科学与工程学院
5.1 问题的提出
C语言程序是由什么构成的? 函数 什么是函数?
能完成特定功能的功能块; 一般有输入参数 和返回值; 一次定义,可以调用多次。
一个C语言程序为什么需要不同的函数?
一个函数过大难于编写和维护; 一个函数的程序不利于协作; 代码和功能共享的需要。
5
信息科学与工程学院
6. 函数调用举例分析(见下页)
15
信息科学与工程学院
实参到形参是单向值传递 例2 求两个整数中的最大值
int max(int x,int y) /*函数定义*/ { int temp; if (x>y) temp=x; else temp = y; COPY return temp; } void main() { int a,b; scanf("%d,%d",&a,&b); a = max(a,b); /*函数调用*/ printf("\n max= %d \n",a); }
2
信息科学与工程学院
第5章 函数
本章需要掌握的知识点: 函数定义 函数说明 函数调用 形参和实参的关系 变量的存储类别
数据结构之递归

数据结构之递归Ⅲ递归的三⼤要素// 算 n 的阶乘(假设n不为0)int f(int n){if(n <= 2){return n;}}第三要素:找出函数的等价关系式第三要素就是,我们要不断缩⼩参数的范围,缩⼩之后,我们可以通过⼀些辅助的变量或者操作,使原函数的结果不变。
例如,f(n) 这个范围⽐较⼤,我们可以让 f(n) = n * f(n-1)。
这样,范围就由 n 变成了 n-1 了,范围变⼩了,并且为了原函数f(n) 不变,我们需要让 f(n-1) 乘以 n。
说⽩了,就是要找到原函数的⼀个等价关系式,f(n) 的等价关系式为 n * f(n-1),即f(n) = n * f(n-1)。
这个等价关系式的寻找,可以说是最难的⼀步了,如果你不⼤懂也没关系,因为你不是天才,你还需要多接触⼏道题,我会在接下来的⽂章中,找 10 道递归题,让你慢慢熟悉起来。
找出了这个等价,继续完善我们的代码,我们把这个等价式写进函数⾥。
如下:// 算 n 的阶乘(假设n不为0)int f(int n){if(n <= 2){return n;}// 把 f(n) 的等价操作写进去return f(n-1) * n;}⾄此,递归三要素已经都写进代码⾥了,所以这个 f(n) 功能的内部代码我们已经写好了。
这就是递归最重要的三要素,每次做递归的时候,你就强迫⾃⼰试着去寻找这三个要素。
还是不懂?没关系,我再按照这个模式讲⼀些题。
有些有点⼩基础的可能觉得我写的太简单了,没耐⼼看?少侠,请继续看,我下⾯还会讲如何优化递归。
当然,⼤佬请随意,可以直接拉动最下⾯留⾔给我⼀些建议,万分感谢!Ⅲ案例1:斐波那契数列斐波那契数列的是这样⼀个数列:1、1、2、3、5、8、13、21、34....,即第⼀项 f(1) = 1,第⼆项 f(2) = 1.....,第 n 项⽬为 f(n) = f(n-1) + f(n-2)。
求第 n 项的值是多少。
python课件第五章Python的函数:函数的递归及应用

教学内容
5.5 函数的递归
5.7 内置函数
教学要求
掌握:函数的嵌套与递归。 熟悉:函数的概念、函数化编程的思想。 了解:内置函数的使用。
5.5 函数的递归
函数定义中调用函数自身的方式形成递归。
例5-4 求第n项的阶乘
阶乘一般定义:n!=n(n-1)(n-2)……(1)
2022/2/3
17
5.7 Python内置函数
2022/2/3
18
5.7 Python内置函数
2022/2/3
19
5.7 Python内置函数
2022/2/3
20
小结
掌握:函数的定义和使用;函数的参数和 函数的返回值;函数的嵌套。
熟悉:函数的递归。 了解:内置函数的使用。
课堂小测
单选题 1分
n!=
n(n-1)! (n>0)
2022/2/3
5
5.5 函数的递归
例5-4 求第n项的阶乘
2022/2/3
6
ห้องสมุดไป่ตู้
5.5 函数的递归
执 行 过 程
2022/2/3
7
多选题 1分
下列是递归程序特点的是()。
A 书写简单 B 一定要有基例 C 执行效率高 D 思路简单,但不宜理解
提交
5.5 函数的递归
例5-5 科赫曲线的绘制
2022/2/3
9
5.5 函数的递归
例5-5 科赫曲线的绘制——实验七(见实验课件)
2022/2/3
10
课后思考:汉诺塔问题
问题IPO 输入:汉诺塔的层数 处理:实现一个汉诺塔圆盘的移动,采用递归实现将所有圆盘从A移 动到C。 输出:整个移动流程
递归函数python经典例子

递归函数python经典例子递归函数是编程中经常使用的一种技巧,它可以让函数在内部调用自身来实现复杂的逻辑。
下面是十个经典的递归函数示例,展示了不同场景下递归函数的应用。
1. 阶乘函数阶乘函数是递归函数的经典示例。
它用于计算一个整数的阶乘,即n! = n * (n-1) * (n-2) * ... * 1。
递归版本的阶乘函数可以通过将问题拆分为更小的子问题来解决。
```pythondef factorial(n):if n == 0:return 1else:return n * factorial(n-1)```2. 斐波那契数列斐波那契数列是一个经典的递归问题,定义如下:F(0) = 0, F(1) = 1, F(n) = F(n-1) + F(n-2)。
递归函数可以用来计算斐波那契数列的第n 个数。
```pythondef fibonacci(n):if n <= 1:return nelse:return fibonacci(n-1) + fibonacci(n-2)```3. 数组求和递归函数可以用来计算一个数组中所有元素的和。
可以将数组分为第一个元素和剩余部分,然后递归地计算剩余部分的和。
```pythondef array_sum(arr):if len(arr) == 0:return 0else:return arr[0] + array_sum(arr[1:])```4. 列表反转递归函数可以用来反转一个列表。
可以将列表分为第一个元素和剩余部分,然后递归地反转剩余部分,并将第一个元素放在列表的末尾。
```pythondef reverse_list(lst):if len(lst) <= 1:return lstelse:return reverse_list(lst[1:]) + [lst[0]]```5. 字符串反转递归函数可以用来反转一个字符串。
可以将字符串分为第一个字符和剩余部分,然后递归地反转剩余部分,并将第一个字符放在字符串的末尾。
C语言程序设计-第5章--函数

实参可以是常量、变量或表达式,但要求 它们必须要有确定的值,在调用时将实参 的值赋给形参。另外,实参和形参的类型 应相同或兼容。
— 31 —
5.2 函数的参数传递和返回值
➢ 5.2.2 函数的返回值
一般情况下,主调函数调用完被调函数后,都希望能够得到一 个确定的值,这就是函数的返回值。在C语言中,函数返回值 是通过return语句来实现的。return语句的一般形式有3种:
/*函数声明*/
/*调用逆序函数,将a的逆序值赋给b*/ /*调用逆序函数,将b的逆序值赋给c */
— 23 —
5.2 函数的参数传递和返回值
➢ 5.2.1 函数的形参与实参
{
int y=0,sign=1;
/*定义sign表示x的符号,定义变量y代表逆序数据*/
if(x<0)
/*当x小于0时取符号及取反*/
— 18 —
5.1 函数的定义和调用
➢ 5.1.2 函数的调用
另外,按函数在语句中的作用来分,可以有以下3种函数调用方式:
函数表达式
函数语句
函数作为实参
函数作为表达式中的一项出 现,以函数返回值参与表达 式的运算。
函数调用的一般形式加上分 号即构成函数语句。
函数作为另一个函数调用的 实际参数出现,即把该函数 的返回值作为实参进行传送。
#include<stdio.h> int main() {
int x=0,y; y=trans(x); printf("y=%d\n",y); printf("x=%d\n",x); return 0; } trans(int a) { a++; printf("a=%d\n", a); return a; }
函数的递归调用

函数的递归调用1.递归基本概念所谓递归,简而言之就是应用程序自身调用自身,以实现层次数据结构的查询和访问。
递归的使用可以使代码更简洁清晰,可读性更好。
但由于递归需要系统堆栈,所以空间消耗要比非递归代码要大很多,而且,如果递归深度太大,可能系统资源会不够用。
从理论上说,所有的递归函数都可以转换为迭代函数,反之亦然,然而代价通常都是比较高的。
但从算法结构来说,递归声明的结构并不总能够转换为迭代结构,原因在于结构的引申本身属于递归的概念,用迭代的方法在设计初期根本无法实现,这就像动多态的东西并不总是可以用静多态的方法实现一样。
这也是为什么在结构设计时,通常采用递归的方式而不是采用迭代的方式的原因,一个极典型的例子类似于链表,使用递归定义及其简单,但对于内存定义(数组方式)其定义及调用处理说明就变得很晦涩,尤其是在遇到环链、图、网格等问题时,使用迭代方式从描述到实现上都变得不现实。
因而可以从实际上说,所有的迭代可以转换为递归,但递归不一定可以转换为迭代。
2.C语言中的函数可以递归调用可以直接(简单递归)或间接(间接递归)地自己调自己。
这里我们只简单的谈谈直接递归。
采用递归方法来解决问题,必须符合以下三个条件:(1)可以把要解决的问题转化为一个新问题,而这个新的问题的解决方法仍与原来的解决方法相同,只是所处理的对象有规律地递增或递减。
说明:解决问题的方法相同,调用函数的参数每次不同(有规律的递增或递减),如果没有规律也就不能适用递归调用。
(2)可以应用这个转化过程使问题得到解决。
说明:使用其他的办法比较麻烦或很难解决,而使用递归的方法可以很好地解决问题。
(3)必定要有一个明确的结束递归的条件。
说明:一定要能够在适当的地方结束递归调用。
不然可能导致系统崩溃。
3.递归实例下面用一个实例来说明递归调用。
使用递归的方法求n!当n>1时,求n!的问题可以转化为n*(n-1)!的新问题。
比如n=5:第一部分:5*4*3*2*1 n*(n-1)!第二部分:4*3*2*1 (n-1)*(n-2)!第三部分:3*2*1 (n-2)(n-3)!第四部分:2*1 (n-3)(n-4)!第五部分:1 (n-5)! 5-5=0,得到值1,结束递归。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
同理,移动 个盘子的问题又可简化成移动 个盘子,移动4个盘 个盘子的问题又可简化成移动4个盘子 同理,移动5个盘子的问题又可简化成移动 个盘子,移动 个盘 这样,问题就简化成仅仅将5个盘子从 个盘子从A柱 这样,问题就简化成仅仅将 个盘子从 柱 子的问题又可简化成移动3个盘子 子的问题又可简化成移动 个盘子 ……这一过程反复进行下去 这一过程反复进行下去 移到B柱 再从B柱移到 柱移到C柱 移到 柱,再从 柱移到 柱。 直到只剩下一个盘子时将其移动 。
13
求斐波那契数列的第n项 例3:用函数 求斐波那契数列的第 项。斐波那契数 :用函数fib求斐波那契数列的第 列为: 、 、 、 、 、 函数fib定义如下 定义如下: 列为:0、1、1、2、3、…… 。函数 定义如下:
fib(n) = 0 当n=1 = 1 当n=2 = fib(n-2)+fib(n-1)
请画出求fib(3)的递归调用过程图示 的递归调用过程图示 请画出求
14
3.递归程序设计 递归程序设计
• 每求一项数,需要递归调用2次该函数;计算 每求一项数,需要递归调用 次该函数 次该函数; 斐波那契数列第30项的递归调用次数是 的30 斐波那契数列第 项的递归调用次数是2的 项的递归调用次数是 次方(大约10亿次 亿次!) 次方(大约 亿次!) • 可见递归的思想特别符合人们的思维习惯,便 可见递归的思想特别符合人们的思维习惯, 于问题解决和编程实现。 于问题解决和编程实现。但递归的程序设计方 法比较占用系统资源,效率也较低。 法比较占用系统资源,效率也较低。 • 课下请改写 函数,该用非递归方式实现 课下请改写fib函数 函数, long fib(long), 计算斐波那契数列第 项。 计算斐波那契数列第n项
• 什么样的问题可以用递归解决? 什么样的问题可以用递归解决? 如果解决问题的方法是把该问题分解成小的子 问题, 问题,并且这些小的子问题可以用同样的算法 解决, 解决,当分解到可以解决的比较简单的子问题 时分解过程即终止,那么就可以用递归。 时分解过程即终止,那么就可以用递归。 递归的思想就是将一个问题先转化为与原问题 性质相同、但规模小一级的新问题, 性质相同、但规模小一级的新问题,然后再重 复这样的转化, 复这样的转化,直到问题的规模减小到我们很 容易解决为止。 容易解决为止。
当n>=3 >
long fib(long n) 请分析该问题是否可以用递归算法解决? 请分析该问题是否可以用递归算法解决? { 若可以,请写出该递归算法。 若可以,请写出该递归算法。 if(n==1 || n==2) return n; else return fib(n-2)+fib(n-1); }
12
3.递归程序设计 递归程序设计
一般来说,递归需要有边界条件、 一般来说,递归需要有边界条件、递归前进段和 递归返回段。当边界条件不满足时,递归前进; 递归返回段。当边界条件不满足时,递归前进;当 边界条件满足时,递归返回。 边界条件满足时,递归返回。 如何设计递归算法: 如何设计递归算法 1)对所求解的问题、要计算的函数书写出其递归 )对所求解的问题、 定义;注意一定要有终止条件和操作。 定义;注意一定要有终止条件和操作。 2)正确地设计参数。 )正确地设计参数。 注意:递归算法最外层肯定采用的是选择结构! 注意:递归算法最外层肯定采用的是选择结构!为 什么? 什么?
3
1.递归的概念 递归的概念
现在换一个角度考虑, !不仅是1× × × 现在换一个角度考虑,n!不仅是 ×2×3×…×n, 还可以定义成: 还可以定义成: 设 f(n)=n! 1 当n=0 =
n! = 则 f(n) = 1 当n=0 = n×(n-1)! 当n>0 × - > n×f (n-1) 当n>0 > × -
根据以上数学 定义,函数f能 定义,函数 能 否写成右边所 示?函数能否 调用自身? 调用自身?
int f(int n) { if(n==0) return 1; else return n*f(n-1); }
答案是肯定 的。C系统 系统 会保证调用 过程的正确 性,这就是 递归! 递归!
4
int f(int n) { if(n==0) 递归的定义: 递归的定义: return 1; 从程序书写来看,在定义一个函数时, 从程序书写来看,在定义一个函数时,若在定 else return 义它的内部又出现对它本身的调用, n*f(n-1); 义它的内部又出现对它本身的调用,则称该函数 是递归的或递归定义的。 int 是递归的或递归定义的。 } f(int n) { 从函数动态运行来看,当调用一个函数A时 从函数动态运行来看,当调用一个函数 时, if(n==0) 在进入函数A且还没有退出(返回)之前,又再 在进入函数 且还没有退出(返回)之前, 且还没有退出 return 一次由于调用A本身而再一次进入函数 本身而再一次进入函数A, 一次由于调用 本身而再一次进入函数 1;,则称 else 之为函数A的递归调用 的递归调用。 之为函数 的递归调用。 return n*f(n-1); }
A(…) { … A(…); … } } A(…) { … B(…); … }
7
B(…) { … A(…); …
2.递归过程 递归过程
• 求f(6)的 ( ) 递归调用过程? 递归调用过程?
int f(int); main() { printf(“6!=%d”,f(6)); system(“pause”); } int f(int n) { if(n==0) return 1; else return n*f(n-1); }
8
递归深度 0(主程序) 1 2 3 4 5 6
f(n) f(6) f(6)=6×f(5) f(5)=5×f(4) f(4)=4×f(3) f(3)=3×f(2) f(2)=2×f(1) f(1)=1×f(0) f(0)=1 (返回) [递推阶段]
2.递归过程 递归过程
6×120=720 5×24=120 4×6=24 3×2=6 2×1=2 1×1=1
17
很显然这是一种递归解法。 很显然这是一种递归解法。它将问题分解成若干 同样类型的小问题, 同样类型的小问题,移动一个盘子的简单操作 就是终止条件。 就是终止条件。
18
A
B
C
A
B
C
将n个圆盘从A柱移到C柱的递归解法: 个圆盘从A柱移到C柱的递归解法: 柱上面的从上往下数的( 个圆盘移到B 柱上, 1 . 将 A 柱上面的从上往下数的 ( n-1) 个圆盘移到 B 柱上 , 中 间通过C柱为辅助。这是一个( 个圆盘的问题; 间通过C柱为辅助。这是一个(n-1)个圆盘的问题; 2. 将A柱上的最后一个圆盘,直接移到C柱上; 柱上的最后一个圆盘,直接移到C柱上; 3.再将B 柱上的 (n-1)个圆盘移到C柱上, 中间以A柱为辅助。 再将B 个圆盘移到C柱上,中间以A柱为辅助。 再将 柱上的( 这又是一个( 个圆盘的问题。 这又是一个(n-1)个圆盘的问题。 以上步骤将移动n个圆盘的问题转化为移动 b, int c) 以上步骤将移动 void move (int n, int a, int (n-1)个圆盘的 函数接口设计: 个圆盘的问题转化为移动 函数接口设计: 个圆盘的问题转化为移动( - ) 问题。 个盘子从 柱移动到c柱 问题。同理,我们可以继续把( - ) 功能: 同理,我们可以继续把(n-1)个圆盘的问题转化 个盘子从a柱移动到 功能:将n个盘子从 柱移动到 柱,中间借助于 b柱。 柱 为(n- 要移动的盘子数; ……,直到最后变成1个圆盘的 参数: -2)个圆盘的问题,……,直到最后变成 个圆盘的 参数:n:要移动的盘子数;a:源柱, b:辅助的柱 子, : )个圆盘的问题, :源柱, : 问题, 问题 这时候,问题就很容易解决了( c:目标柱 : ,这时候,问题就很容易解决了(直接移动就可以 了)。
函数--递归 第五章 函数 递归1 Nhomakorabea提纲
1. 递归的概念 2. 递归过程 3. 递归程序设计
2
1.递归的概念 递归的概念
例:编写一个函数fac,计算阶乘 编写一个函数 ,计算阶乘n! 按过去的设计思想,该函数可以写成: 按过去的设计思想,该函数可以写成: int fac(int n) { int i,p; p=1; for(i=2;i<=n;i++) p=p*i; return p; }
5
1.递归的概念 递归的概念
次幂。 例2:求x的n次幂。函数 : 的 次幂
x
n
可定义如下: 可定义如下:
x
n
1 = x *x
n −1
当n=0 = 当n>0 >
float power(float x,int n) , { if(n==0) return 1; else return x*power(x, n-1); }
6
1.递归的概念 递归的概念
递归可以分为直接递归和间接递归两种。 递归可以分为直接递归和间接递归两种。 直接递归:函数体里面发生对自己的调用; 直接递归:函数体里面发生对自己的调用; 间接递归:函数A调用函数B 而函数B 间接递归:函数A调用函数B,而函数B又直接或 间接地调用函数A 间接地调用函数A。
15
三、递归问题举例
一、汉诺塔问题 传说印度布拉马圣殿( 传说印度布拉马圣殿(Temple of Brahma)的教 ) 士们有一黄铜烧铸的平台, 士们有一黄铜烧铸的平台,上立三根金刚石柱 柱上堆放了64个金盘子 子。A柱上堆放了 个金盘子,每个盘子都比 柱上堆放了 个金盘子, 其下面的盘子略小一些。 其下面的盘子略小一些。当教士们将盘子全部 柱移到C柱以后 从A柱移到 柱以后,世界就到了末日。当然, 柱移到 柱以后,世界就到了末日。当然, 这个问题还有一些特定的条件, 这个问题还有一些特定的条件,那就是在柱子 之间只能移动一个盘子并且任何时候大盘子都 只能移动一个盘子并且 之间只能移动一个盘子并且任何时候大盘子都 不能放到小盘子上。教士们当然还在忙碌着, 不能放到小盘子上。教士们当然还在忙碌着, 因为这需要2 次移动。 因为这需要 64-1次移动。如果一次移动需要一 次移动 秒钟,那么全部操作需要5000亿年以上时间。 亿年以上时间。 秒钟,那么全部操作需要 亿年以上时间