递归函数通常是用来解决什么问题的?

2024-05-09 19:33

1. 递归函数通常是用来解决什么问题的?

  递归函数通常用来解决结构自相似的问题。所谓结构自相似,是指构成原问题的子问题与原问题在结构上相似,可以用类似的方法解决。具体地,整个问题的解决,可以分为两部分:第一部分是一些特殊情况,有直接的解法;第二部分与原问题相似,但比原问题的规模小。实际上,递归是把一个不能或不好解决的大问题转化为一个或几个小问题,再把这些小问题进一步分解成更小的问题,直至每个小问题都可以直接解决。因此,递归有两个基本要素:
  (1)边界条件:确定递归到何时终止,也称为递归出口。
  (2)递归模式:大问题是如何分解为小问题的,也称为递归体。递归函数只有具备了这两个要素,才能在有限次计算后得出结果。
  递归就是某个函数直接或间接地调用了自身,这种调用方式叫做递归调用。说白了,还是函数调用。既然是函数调用,那么就有一个雷打不动的原则:所有被调用的函数都将创建一个副本,各自为调用者服务,而不受其他函数的影响。

递归函数通常是用来解决什么问题的?

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. 递归函数通常是用来解决什么问题的?

递归函数通常用来解决结构自相似的问题。所谓结构自相似,是指构成原问题的子问题与原问题在结构上相似,可以用类似的方法解决。具体地,整个问题的解决,可以分为两部分:第一部分是一些特殊情况,有直接的解法;第二部分与原问题相似,但比原问题的规模小。实际上,递归是把一个不能或不好解决的大问题转化为一个或几个小问题,再把这些小问题进一步分解成更小的问题,直至每个小问题都可以直接解决。因此,递归有两个基本要素:
  (1)边界条件:确定递归到何时终止,也称为递归出口。
  (2)递归模式:大问题是如何分解为小问题的,也称为递归体。递归函数只有具备了这两个要素,才能在有限次计算后得出结果。
  递归就是某个函数直接或间接地调用了自身,这种调用方式叫做递归调用。说白了,还是函数调用。既然是函数调用,那么就有一个雷打不动的原则:所有被调用的函数都将创建一个副本,各自为调用者服务,而不受其他函数的影响。

递归函数通常是用来解决什么问题的?

4. 递归函数是什么


5. 递归问题(求过程)

递归算法的执行过程分递推和回归两个阶段在递推阶段,把较复杂的问题(规模为n)的求解推到比原问题简单一些的问题(规模小于n)的求解。例如上例中,求解fib(n),把它推到求解fib(n-1)和fib(n-2)。也就是说,为计算fib(n),必须先计算fib(n-1)和fib(n-2),而计算fib(n-1)和fib(n-2),又必须先计算fib(n-3)和fib(n-4)。依次类推,直至计算fib(1)和fib(0),分别能立即得到结果1和0。在递推阶段,必须要有终止递归的情况。例如在函数fib中,当n为1和0的情况。

在回归阶段,当获得最简单情况的解后,逐级返回,依次得到稍复杂问题的解,例如得到fib(1)和fib(0)后,返回得到fib(2)的结果,……,在得到了fib(n-1)和fib(n-2)的结果后,返回得到fib(n)的结果。

在编写递归函数时要注意,函数中的局部变量和参数只是局限于当前调用层,当递推进入“简单问题”层时,原来层次上的参数和局部变量便被隐蔽起来。在一系列“简单问题”层,它们各有自己的参数和局部变量。

递归问题(求过程)

6. 求解递归问题

调用多少次自己取决于这个函数的两个参数x和y的值。
首先你的这个gys函数是利用辗转相除法求两个整数的最大公约数。
你首先得了解什么是辗转相除法求最大公约数下面是百度百科解释:

下面再来看你这个函数就方便理解了:
根据辗转相除法的定义描述,首先方法传递进来两个整数 x,y ;x是被除数,y是除数。如果y!=0; 那么就需要把x%y(这是取x除以y的余数)的值作为除数,y作为被除数,再次调用你的这个函数自身,只要不满足y==0 (也就是你的这个条件y!=0 值是false的时候),就会一直循环调用这个函数自身,直到y==0才会返回x就是你的这句 return x;假设此时x的值是b, 之后你调用自身函数就会把这个b一层一层的返回。那么你调用这个方法的最终结果就是b.
为了让你更加清晰的了解这个递归过程我举个例子:
比如:
step1,调用gys(21,14)-> y=14 不满足 y==0 则调用函数自身,其中x%y也就是21%14=7 下一步;
step2,调用gys(14, 7)-> y= 7 不满足 y==0 则调用函数自身,其中x%y也就是14%7 =0 下一步;
step3,调用gys(7, 0)-> y= 0  满足 y==0 则这返回 x,其中x=7 下一步;
step4,  返回 step3中调用的gys(7, 0)=7 下一步;
step5, 返回 step2中调用的gys(14, 7)=7 下一步;
step6, 返回 step1中调用的gys(21, 14)=7 下一步;
程序结束,得到调用gys(21, 14)的值为7.

7. 递归函数怎么写

if()语句中,条件判断是个“逻辑表达式”。逻辑表达式的结果只有2个:假(0)或者真(1)。那条语句:
if (n) {...}就是利用了这一点:当 n > 0时,为“真”;当n<=0时,为“假”。
printn(n-1);只是把n-1作为参数,递归调用了自己。并不等于:
n = printn(n-1);希望我说明白了。有问题继续交流,谢谢。

递归函数怎么写

8. 什么是递归函数?

递归式解决逻辑问题的。基本思想是::把规模大的、较难解决的问题变成规模较小的、易解决的同一问题。规模较小的问题又变成规模更小的问题,并且小到一定程度可以直接得出它的解,从而得到原来问题的解。
C有一个汉诺塔,就是非用递归才能解决的一个问题。
利用递归算法解题,首先要对问题的以下三个方面进行分析: 
一、决定问题规模的参数。需要用递归算法解决的问题,其规模通常都是比较大的,在问题中决定规模大小(或问题复杂程度)的量有哪些?把它们找出来。 

二、问题的边界条件及边界值。在什么情况下可以直接得出问题的解?这就是问题的边界条件及边界值。 

三、解决问题的通式。把规模大的、较难解决的问题变成规模较小、易解决的同一问题,需要通过哪些步骤或等式来实现?这是解决递归问题的难点。
最新文章
热门文章
推荐阅读