1. 什么是递归函数?
递归式解决逻辑问题的。基本思想是::把规模大的、较难解决的问题变成规模较小的、易解决的同一问题。规模较小的问题又变成规模更小的问题,并且小到一定程度可以直接得出它的解,从而得到原来问题的解。
C有一个汉诺塔,就是非用递归才能解决的一个问题。
利用递归算法解题,首先要对问题的以下三个方面进行分析:
一、决定问题规模的参数。需要用递归算法解决的问题,其规模通常都是比较大的,在问题中决定规模大小(或问题复杂程度)的量有哪些?把它们找出来。
二、问题的边界条件及边界值。在什么情况下可以直接得出问题的解?这就是问题的边界条件及边界值。
三、解决问题的通式。把规模大的、较难解决的问题变成规模较小、易解决的同一问题,需要通过哪些步骤或等式来实现?这是解决递归问题的难点。
2. 函数递归
讲解吗:
那给你讲一下。
比如 求一个数的阶乘 n! 在数学上这个是要一步步算的,怎么算呢,这样
n!=1*2*3*4*5*...*n 也就是从1乘到n 但是你会发现 从1乘到n-1是什么呢,是不是(n-1)! 这就有意思了,要求的n!势必要先算到(n-1)!然后再乘上一个n就得到n!,那也就是说n!=(n-1)!*n。这更有意思了,本来我要求n!,反而在展开中也出现了和我n!形状类似的(n-1)!,这是怎么回事呢。这就是如果我假定有一个函数是用来求n!,那么函数的内部是需要用到(n-1)!*n表达式的。可是我现在就是在写这个函数的啊,怎么函数里面居然提前用到了这个函数。现在你明白了吗,这就是函数的递归。
简单点,就是求一个问题的时候,需要依赖这个问题的另一个量的结果的这么个问题。
如求n!,需要依赖知道n-1的阶乘。可是(n-1)!其实与n!原理一样,都是那么个求法,只不过问题的规模量不同而已,一个是n,一个是n-1.
3. 什么是递归函数?举例
4. 递归函数是什么
5. 递归函数问题
解题步骤:
1,ack(1,n)=ack(0,ack(1,n-1))+1=ack(1,n-1)+1;
由递推式得:ack(1,n)=n+1;
2,ack(2,n)=ack(1,ack(2,n-1))=ack(2,n-1)+2;
//递推式
由递推式得:ack(2,n)=2n+3;
3,ack(3,n)=ack(2,ack(3,n-1))=2*ack(3,n-1)+3; //递推式
即:ack(3,n)+3=2(ack(3,n-1)+3)
得: ack(3,n)+3=(ack(3,1)+3) * 2^(n-1);
又ack(3,1)=2ack(3,0)+3
ack(3,0)=a(2,1)=5
所以ack(3,1)=13;
所以 ack(3,n)=2^(n+3) -
3;
所以:ack(3,3)=61;
PS:
这个是著名的Ackerman(阿克曼)函数,典型的非原始递归的递归函数,m<=3的时候像我上面的递推和计算很简单,但是一旦再大就会很麻烦,甚至计算机会彻底无法计算。
可以参考wiki资料了解相关内容:
http://zh.wikipedia.org/zh-cn/%E9%98%BF%E5%85%8B%E6%9B%BC%E5%87%BD%E6%95%B8
6. 函数递归问题
有用。递归的概念尤其是在编程领域很实用,举个简单的例子:比如你要搜索某个路径下面所有的图片或者音乐文件,那么你就要用到递归,因为你搜索的路径下面既有文件夹又有文件。比如搜某个文件夹下面的文件函数为SearchFile(String path),那么在这个函数实现里面遇到新的文件夹,就得再次调用函数SearchFile(String path),经典的函数递归。
7. 递归函数怎么写
if()语句中,条件判断是个“逻辑表达式”。逻辑表达式的结果只有2个:假(0)或者真(1)。那条语句:
if (n) {...}就是利用了这一点:当 n > 0时,为“真”;当n<=0时,为“假”。
printn(n-1);只是把n-1作为参数,递归调用了自己。并不等于:
n = printn(n-1);希望我说明白了。有问题继续交流,谢谢。
8. 递归函数的介绍
在数理逻辑和计算机科学中,递归函数或μ-递归函数是一类从自然数到自然数的函数,它是在某种直觉意义上是可计算的 。事实上,在可计算性理论中证明了递归函数精确的是图灵机的可计算函数。递归函数有关于原始递归函数,并且它们的归纳定义(见下)建造在原始递归函数之上。但是,不是所有递归函数都是原始递归函数 — 最著名的这种函数是阿克曼函数。其他等价的函数类是λ-递归函数和马尔可夫算法可计算的函数。 一个含直接或间接调用本函数语句的函数被称之为递归函数,在上面的例子中能够看出,它必须满足以下两个条件:1) 在每一次调用自己时,必须是(在某种意义上)更接近于解;2) 必须有一个终止处理或计算的准则。例如:梵塔的递归函数 //Cvoid hanoi(int n,char x,char y,char z){if(n==1)move(x,1,z);else{hanoi(n-1,x,z,y);move(x,n,z);hanoi(n-1,y,x,z);}}阶乘的递归函数,公式如下: //C++int Factorial(int n){if(n==0||n==1)return 1;elsereturn n * Factorial(n-1)}