递归知识蒸馏

bdqnwqk2年前学者16

1.递归的原理解释

递归的底层实现其实是一个栈.栈的特点是后进先出,也就是最后进入栈的事件是最先被处理的.

递归就是这样运作.比如计算阶乘函数F(n)=n!=n*F(n-1)=。.

写成递归,我用java

public static long F(long num){

if(num<=1)

return 1;

return F(num-1)*num;

}

static public void main(String argv[]){

System.out.println(F(5));

}:

第一次计算的时候是F(num),进入之后会直接return F(num-1)*num.也就是把这一项入栈.

然后这一项到底是多少还不知道需要继续计算.

第二次递归就是 F(num-1-1)*(num-1).入栈.

直到满足num<=1.计算出最后入栈的F(1)=1;return这句就限定了最终栈的大小.

然后开始出栈.第一个出栈的是F(1);已经计算得出是1;

第二个出栈是F(2).由F(1)可以得知F(2).

这样直到栈空,阶乘也就计算出来了.

递归的内部是栈实现的.理解了这个,你也可以自己写非递归的递归,也就是用栈实现的递归.

2.关于 递归方法 怎么灵活的运用

这东西我觉得要看悟性了。

递归的原理是什么?递归并不是立马把所有问题给解决,而是它说要解决A问题?好,你先把B问题解决好了,我就可以解决A问题了,然后到B问题,它又说,只要你能把C问题解决了,我就能解决B问题,直到最后一个倒霉的人,它说我可以Z问题,当它解决完Z之后,它上层的Y就解决了直到最后的A问题解决。

例如求阶乘n!,我没必要用1*2*3*。n来求,我只需要说,如果你知道(n-1)!那么我就可以用n*(n-1)!来求n!

然后要求(n-1)!,你必须先求(n-2)。。。直到最后的1!=1,然后才反推回来。

我不知道这样说你清楚吗,再举个通俗点的例子吧,你想给你一个远在美国的朋友邮信,你没必要把信直接送到他手里,你只需要把信放到邮箱,剩下的事你不用去管了,而分发员只需把信分类,剩下的事他不管,直到最后一步,你的朋友从他的信箱中取出这封邮件。

3.蒸馏过程是如何分类的

(1) 按操作流程分为间歇蒸馏和连续蒸馏。

间歇蒸馏是指在一个操作过程中,塔的操作参数不断改变,以达到所需馏分的目的,属于非稳态操作。主要用于小规模生产或某些有特殊要求的场合,又称为分批蒸馏。

连续蒸馏是在塔中某一板上连续进料,在塔顶 (或塔底)得到合格产品,适用于大规模生产的场合,属于稳态操作过程。 (2) 按蒸馏方法不同可分为简单蒸馏、平衡蒸馏、精馏和特殊精馏。

平衡蒸馏是指液体混合物加热后,使部分液体汽化,达到初步分离的目的。对于一般较易分离的物系或分离要求不高的场合,可采用简单蒸馏或平衡蒸馏。

对于待分离物系中各组分挥发度相差不大且分离要求较高的场合可采用精馏,在实际生产中精馏的应用最为广泛。 对于待分离物系中各组分挥发度相差很小甚至形成共沸物,采用普通精馏方法不能分离的物系可采用特殊精馏,主要包括萃取精馏、共沸精馏、加盐精馏、反应精馏、吸附精馏等。

(3) 按操作压力可分为常压蒸馏、加压蒸馏和减压蒸馏。一般情况下,多采用常压蒸馏;若在常压下不能进行分离(如常压下为气态的混合物)或达不到分离要求的,可采用加压蒸馏;对于常压下沸点较高或热敏性混合物,则可采用减压蒸馏。

(4) 按待分离混合物所含有的组分数可分为双组分蒸馏和多组分蒸馏。双组分蒸馏是指待分离物系中只含有两个组分,该物系的分离计算简单;多组分蒸馏是指待分离物系中含有多个组分,是工业生产中常见的蒸馏方式。

4.递归的特点和基础用法

计算n!可用递归公式如下: 1 当 n=0 时 fac(n)={n*fac(n-1) 当n>0时 可编写程序如下:program fac2; var n:integer; function fac(n:integer):real; begin if n=0 then fac:=1 else fac:=n*fac(n-1) end; begin write('n=');readln(n); writeln('fac(',n,')=',fac(n):6:0); end.递归是计算机科学的一个重要概念,递归的方法是程序设计中有效的方法,采用递归编写 程序能是程序变得简洁和清晰.2.1 递归的概念1.概念 一个过程(或函数)直接或间接调用自己本身,这种过程(或函数)叫递归过程(或函数).如:procedure a; begin . . . a; . . .end; 这种方式是直接调用.又如: procedure b; procedure c; begin begin . . . . . . c; b; . . . . . .end; end; 这种方式是间接调用.例1计算n!可用递归公式如下: 1 当 n=0 时 fac(n)={n*fac(n-1) 当n>0时 可编写程序如下:program fac2; var n:integer; function fac(n:integer):real; begin if n=0 then fac:=1 else fac:=n*fac(n-1) end; begin write('n=');readln(n); writeln('fac(',n,')=',fac(n):6:0); end.例2 楼梯有n阶台阶,上楼可以一步上1阶,也可以一步上2阶,编一程序计算共有多少种不同的走法.设n阶台阶的走法数为f(n) 显然有 1 n=1 f(n)={2 n=2 f(n-1)+f(n-2) n>2 可编程序如下:program louti; var n:integer; function f(x:integer):integer; begin if x=1 then f:=1 else if x=2 then f:=2 else f:=f(x-1)+f(x-2); end; begin write('n=');read(n); writeln('f(',n,')=',f(n)) end.2.2 如何设计递归算法1.确定递归公式2.确定边界(终了)条件 练习:用递归的方法完成下列问题1.求数组中的最大数2.1+2+3+。

+n3.求n个整数的积4.求n个整数的平均值5.求n个自然数的最大公约数与最小公倍数6.有一对雌雄兔,每两个月就繁殖雌雄各一对兔子.问n个月后共有多少对兔子?7.已知:数列1,1,2,4,7,13,24,44,。求数列的第 n项.2.3典型例题 例3 梵塔问题 如图:已知有三根针分别用1,2,3表示,在一号针中从小放n个盘子,现要求把所有的盘子 从1针全部移到3针,移动规则是:使用2针作为过度针,每次只移动一块盘子,且每根针上 不能出现大盘压小盘.找出移动次数最小的方案.程序如下:program fanta; var n:integer; procedure move(n,a,b,c:integer); begin if n=1 then writeln(a,'--->',c) else begin move(n-1,a,c,b); writeln(a,'--->',c); move(n-1,b,a,c); end; end; begin write('Enter n='); read(n); move(n,1,2,3); end.例4 快速排序 快速排序的思想是:先从数据序列中选一个元素,并将序列中所有比该元素小的元素都放到它的右边或左边,再对左右两边分别用同样的方法处之直到每一个待处理的序列的长度为1, 处理结束.程序如下:program kspv; const n=7; type arr=array[1..n] of integer; var a:arr; i:integer; procedure quicksort(var b:arr; s,t:integer); var i,j,x,t1:integer; begin i:=s;j:=t;x:=b[i]; repeat while (b[j]>=x) and (j>i) do j:=j-1; if j>i then begin t1:=b[i]; b[i]:=b[j];b[j]:=t1;end; while (b[i] if i until i=j; b[i]:=x; i:=i+1;j:=j-1; if s if i end; begin write('input data:'); for i:=1 to n do read(a[i]); writeln; quicksort(a,1,n); write('output data:'); for i:=1 to n do write(a[i]:6); writeln; end.。

递归知识蒸馏

标签: 递归知识