导航:首页 > 知识科普 > 哪些问题只能用递归的方法

哪些问题只能用递归的方法

发布时间:2022-07-19 02:38:06

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

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

Ⅱ 递归解决什么样的问题

这个 乍一说 还真不好解释,递归函数都是自己调用自己的,应该是解决一些相对复杂的问题,一般能用递归解决的问题都能用非递归的方法解决。但是反过来就不一定了! 不知道对你有用没用

Ⅲ 递归主方法

递归的主要方法是什么?

一、递归算法
递归算法(英语:recursion algorithm)在计算机科学中是指一种通过重复将问题分解为同类的子问题而解决问题的方法。递归式方法可以被用于解决很多的计算机科学问题,因此它是计算机科学中十分重要的一个概念。绝大多数编程语言支持函数的自调用,在这些语言中函数可以通过调用自身来进行递归。计算理论可以证明递归的作用可以完全取代循环,因此在很多函数编程语言(如Scheme)中习惯用递归来实现循环。
二、递归程序
在支持自调的编程语言中,递归可以通过简单的函数调用来完成,如计算阶乘的程序在数学上可以定义为:

这一程序在Scheme语言中可以写作:
1
(define (factorial n) (if (= n 0) 1 (* n (factorial (- n 1)))))
不动点组合子
即使一个编程语言不支持自调用,如果在这语言中函数是第一类对象(即可以在运行期创建并作为变量处理),递归可以通过不动点组合子(英语:Fixed-point combinator)来产生。以下Scheme程序没有用到自调用,但是利用了一个叫做Z 算子(英语:Z combinator)的不动点组合子,因此同样能达到递归的目的。
1
(define Z (lambda (f) ((lambda (recur) (f (lambda arg (apply (recur recur) arg)))) (lambda (recur) (f (lambda arg (apply (recur recur) arg)))))))(define fact (Z (lambda (f) (lambda (n) (if (<= n 0) 1 (* n (f (- n 1))))))))
这一程序思路是,既然在这里函数不能调用其自身,我们可以用 Z 组合子应用(application)这个函数后得到的函数再应用需计算的参数。
尾部递归
尾部递归是指递归函数在调用自身后直接传回其值,而不对其再加运算。尾部递归与循环是等价的,而且在一些语言(如Scheme中)可以被优化为循环指令。 因此,在这些语言中尾部递归不会占用调用堆栈空间。以下Scheme程序同样计算一个数字的阶乘,但是使用尾部递归:
1
(define (factorial n) (define (iter proct counter) (if (> counter n) proct (iter (* counter proct) (+ counter 1)))) (iter 1 1))
三、能够解决的问题
数据的定义是按递归定义的。如Fibonacci函数。
问题解法按递归算法实现。如Hanoi问题。
数据的结构形式是按递归定义的。如二叉树、广义表等。
四、递归数据
数据类型可以通过递归来进行定义,比如一个简单的递归定义为自然数的定义:“一个自然数或等于0,或等于另一个自然数加上1”。Haskell中可以定义链表为:
1
data ListOfStrings = EmptyList | Cons String ListOfStrings
这一定义相当于宣告“一个链表或是空串行,或是一个链表之前加上一个字符串”。可以看出所有链表都可以通过这一递归定义来达到。

Ⅳ 什么情况下要用到递归算法C语言中的

在一个子程序(过程或函数)的定义中又直接或间接地调用该子程序本身,称为递归。
递归是一种非常有用的程序设计方法。用递归算法编写的程序结构清晰,具有很好的可读性。
递归算法的基本思想是:把规模大的、较难解决的问题变成规模较小的、易解决的同一问题。规模较小的问题又变成规模更小的问题,并且小到一定程度可以直接得出它的解,从而得到原来问题的解。
利用递归算法解题,首先要对问题的以下三个方面进行分析:
把这些步骤或等式确定下来。 把以上三个方面分析好之后,就可以在子程序中定义递归调用。记得C里面有一个汉诺塔,就是非用递归才能解决的一个问题!可以仔细理解一下哦!

Ⅳ 只能用递归求解的问题都有哪些

1、程序调用自身的编程技巧称为递归。递归做为一种算法在程序设计语言中广泛应用。 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只...

Ⅵ 什么情况下可以利用递归来解决问题再写递归程序时应注意是什么

比如阶乘,也就是说求n可以先求n-1,以此类推,到1,这类问题都可以用递归解决,菲波拉锲数也可以递归。因为递归是总是调用自身解决问题,所以,必须有结束条件,否则会出问题,导致内存卡爆

Ⅶ 在什么情况下可以用递归解决问题在写递归程序时的原则

1.当某个特性可以被重复执行时,就可以用递归来解决。使用递归某些时候可以减少一些代码量。比如编程题里常见的一道题,求斐波拉切数列:

publicstaticintfeibolaqie(intnum)
{
if(num<3)//若num的值为1或2,则返回1
{
return1;
}
else
{
returnfeibolaqie(num-1)+feibolaqie(num-2);
}
}

该函数作用是求出并返回第num位的斐波拉契数列的值。这里面就用到了递归。如果采用常规逻辑来做这道题,要写的代码就得多一些。

2.在写递归时要注意的原则就是,必须让递归函数有结束的机会。如果没有添加任何条件阻止递归的循环,那么就会无限执行下去。

3.日常开发中用递归的可能性很小,当然偶尔搞一搞也是可以。但必须注意不能写错而影响系统运行,另外一定要写上注释,让以后自己和其他开发者都能明白该递归函数的功能。

Ⅷ 什么类型的问题用递归法解决

递归算法本来就是一种效率比较低的算法,但是其优点是很明显的,它能够大幅度降低程序设计的复杂性,非常容易理解。对于对时间复杂度要求较高的程序不适合用递归算法。

Ⅸ 适合用递归算法求解的问题的充分必要条件是什么

先来理解下概念:递归过程一般通过函数或子过程来实现。递归方法:在函数或子过程的内部,直接或者间接地调用自己的算法。

充分必要条件是:问题具有某种可借用的类同自身的子问题描述的性质;某一有限步的子问题(也称本原问题)有直接的解存在。

注意:递归算法解题通常显得很简洁,但递归算法解题的运行效率较低。所以一般不提倡用递归算法设计程序。 在递归调用的过程当中系统为每一层的返回点、局部量等开辟了栈来存储。递归次数过多容易造成栈溢出等。所以一般不提倡用递归算法设计程序。

可以自己写几个就知道了

Ⅹ 请问运用递归关系的三个条件是什么

1、可以把要解决的问题转化为一个新问题,而这个新的题的解决方法仍与原来的解决方法相同,只是所处理的对象有规律地递增或递减。

2、可以应用这个转化过程使问题得到解决。

3、必定要有一个明确的结束递归的条件。

例如:

public class X {

public static void main(String[] args){

int x =new X(). x(100);

System.out.println(x);

}

//1~n 的累加递归

public int x(int n){

return n>1?n+x(--n):n;

}

}

(10)哪些问题只能用递归的方法扩展阅读

设(a0,a1,...,ar,...)是一个序列,把该序列中的ar和它前面的几个ai(0≤i<r)关联起来的方程一个递归关系。如关系式:ar=3ar-1(r≥1)和错排数,Dn=(n-1)(Dn-1+Dn-2) (n=3,4,...),都是递归关系。

有时也称递归关系式为差分方程。为了能从递归关系式计算出序列的每一项,必须知道序列开始的一个或几个数,称这样的数为初始条件或初始值。

在许多情况下,得到递归关系式本身就是朝解决一个计数问题迈了一大步。即使不能从这个递归关系式很快地解出它的一般表达式,这也是相当不错的了。这是因为采取逐步计算的方法可以得到序列各项的值。有些例子说明,没有递归关系,计算的可能性根本就不存在。

阅读全文

与哪些问题只能用递归的方法相关的资料

热点内容
自己家做月饼的简单方法 浏览:898
徒步甩手迈腿的正确方法 浏览:865
傻瓜蟹的食用方法 浏览:322
腱鞘炎有效治疗方法 浏览:332
目的基因获取方法有哪些 浏览:464
骨盆前倾矫正最好最简单的方法 浏览:358
路亚打翘嘴的连接方法 浏览:212
钦州市退休金的计算方法 浏览:913
女圣职者训练方法 浏览:992
最简单的资料分析题解题方法 浏览:369
牛排酱使用方法 浏览:866
热气解决最好方法 浏览:195
四大方法英语怎么说 浏览:508
野艾蒿的食用方法 浏览:14
饺子的包法简单又快的方法 浏览:476
电脑鼠标选项如何设置在哪里设置方法 浏览:211
中医乳腺炎治疗方法 浏览:774
冷冻饵使用方法 浏览:429
中医治疗支原体的方法 浏览:674
如何做牛腩的制作方法 浏览:967