您好、欢迎来到现金彩票网!
当前位置:在线斗牛棋牌游戏 > 尾递归 >

不是说递归更好理解吗 我怎么觉得递归一点都不好理解

发布时间:2019-06-12 10:22 来源:未知 编辑:admin

  我看网络上对递归的解释,是编程和理解起来更轻松,但是程序执行效率变低。但是我看来,稍微复杂一点的函数递归起来,我就想不明白,而且函数里重复递归的时候,我更搞不清楚到底怎么...

  我看网络上对递归的解释,是编程和理解起来更轻松,但是程序执行效率变低。但是我看来,稍微复杂一点的函数递归起来,我就想不明白,而且函数里重复递归的时候,我更搞不清楚到底怎么运行起来的。这哪里利于理解了? 难道是西方人的脑子和我的不一样?

  这就复杂了啊。你要知道,m=A()递归的时候,只需要管一个就行,而n=A()递归的时候,程序又碰上了m=A()。这里就出现了问题,在n=A()递归的时候,m=A()的值是算知道了吗?如果算知道了,程序才能进行下去,否则程序就一直在死循环了,因为程序又得递归去求m的值,求m值又得递归到n上。可是在我想,原来的m的值不会被保存啊,即使保存了,程序如何保证在算某一层的n值时,取出的m能够准确的与其对上。我不知道我哪里想错了,求解释。展开我来答

  可选中1个或多个下面的关键词,搜索相关资料。也可直接点“搜索资料”搜索整个问题。

  最后这句可以视作另外一个方法,比如DG1,只不是过DG1的操作过程和返回结果类型与DG一样的而已

  这里有一个跳出条件,就是data=0;并且一定要放在前面,否则递归一直执行下去,直到出现异常更多追问追答追问这种递归,我还是可以理解的。尾递归,一看就知道程序到底是怎么运行的。加个goto直接变成迭代了。我理解不了的是那种复杂的递归(较复杂函数中的递归和多次递归)。直i接从程序表面上可以知道程序要干什么,但是程序具体运行不清楚。也就是说让我自己写一个程序,不会这样去写,因为我搞不清楚这样写了之后是否真的会照我自己想的去做。

  其实理解递归关键在于理解跳出条件,其实跳出条件跟执行过程有一定数据关联关系,你的代码是其实很好理解当执行到m=A()时,程序重新会进入A()里面,A()里面有跳出条件会作出判断是否返回,(如果没有跳出条件程序会不断进入递归,直到内存耗尽,或出现异常。)当条件符合时就会返回数据回到上一层递归,在上一层递归中接着执行n=A(),然后同m=A()一样进行递归;或者你可以贴个完整的代码,我可以详细解释一下,没有跳出条件的递归是错误的代码,当然如果是为了耗尽内存另当别论你的理解是把这两个递归分开来考虑,两个递归之间没有牵连。可我不是这么想的,首先是m=A()这个需要递归,像你说的程序不断进入A(),程序碰到结束条件,返回。问题就在返回这里,返回的时候,每往上一层,m的值知道了,但是n的值不知道,也就是说每往上一层 n=A()又得重新递归,得到一个n的值,才能使当前这一层的程序结束。(话太长了,见问题补充)其实整个问题在于结束条件而不在m和n的值,也就是说,只要有一处递归可以结束,那么所有递归都是可以结束的,问题只是在于递归的次数多少而已。而你的问题在于你没有考虑结束条件,如你所说你可能将内部变量作为结束条件,这样是无法结束的,因为内部变量每次执行递归时都是新变量与上层是无关联的我之前想错了,笨死了。算m,n两次进入递归之后完全是一样的过程。谢谢你耐心的解释。

http://missartypants.com/weidigui/105.html
锟斤拷锟斤拷锟斤拷QQ微锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷微锟斤拷
关于我们|联系我们|版权声明|网站地图|
Copyright © 2002-2019 现金彩票 版权所有