作者:煙feldker_231 | 来源:互联网 | 2023-05-18 18:51
我是个学生,接触递归程序时觉得就是摸不透,调用自己一次还能理解,比如求介乘。 可是像汉洛嗒那样调用两次就是不明白,让我自己写就是写出来了,估计也是背上了程序。
33 个解决方案
多看些这方面的资料,多思考,勤实践,慢慢就会领悟了.
递归的思想大概是这样的 :
把问题分成N个步骤,可以有两种思维去解决问题,一是先把问题分做1,2到N两个部分,首先去解决步骤1,从问题的开始出发,然后把步骤2当作步骤1 ,依次类推,做到第N个步骤1的时候,问题就完成了。
二是把问题分成1到N-1,和N两个部分,先做步骤N,从问题的结果出发,然后步骤N-1,就成了1到N-1的最后一个步骤了,也就是问题的结果,按上序方法,依次类推,做到第N个最后一个步骤的时候,问题也就解决了:)
能够理解,是不是有些东西只可意会不可言传,难者不会,会者不难!书本怎么把递归解释的那么简单,
简单来说,第归就是调用自己,并且要有出口,不能无限次调用。
明白楼上的意思,可是我明白了,二叉树的遍历,那么我还是觉得如果给我一个三叉树我还是不能很轻松的写出程序
程序的边界有时很容易出错,到底做到n还是n-1还是n+1, 觉得很搞人
我认为你有这样勤学的精神,没有什么可以永远难倒你的!
不要气馁,加油!
涉及到堆栈调用和溢出,所以首先需要理解堆栈。
学过数列吗?第归数列是什么样的?想一下就明白了。
应该说,没有别的办法,你自己努力吧
看看 visual c++6.0 技术内幕
不错的 一看就懂
关键你得动手做!!
其实递归不用你自己搞得很明白就能用了,那是个很简单的思想
你只要知道他是在调用自己,并且给出一个结束条件就行了
同意楼上的观点,具体点就是先假设解决在假设,等到没有问题了,就回去了,你要做的只是重复而已,搞清N与N-1就行了.
不妨用点苯方法,自己一步步追踪程序的每一步,等明白了程序到底怎样执行后,就不用考虑那么多了。
递归是削减问题规模的解决策略,递归有两大步骤:
1.问题规模的削减.
如求阶乘,原来问题规模为N,由fun(N) = N*fun(N-1);将问题规模削减到了N-1.
2.确定递归出口.
无论问题规模如何削减,如果没有最终的出口,只能陷入死循环.
在阶乘问题中递归出口为 if ( n== 0 ) return 1;
并非所有问题都要勉强用递归解决,只有对那些本身就有递归意思的问题才要使用递归.
递归就是 笼统的说就是有相似性!这是递归特点。
还要有出口!
递归的思想大概是这样的 :
把问题分成N个步骤,可以有两种思维去解决问题,一是先把问题分做1,2到N两个部分,首先去解决步骤1,从问题的开始出发,然后把步骤2当作步骤1 ,依次类推,做到第N个步骤1的时候,问题就完成了。
二是把问题分成1到N-1,和N两个部分,先做步骤N,从问题的结果出发,然后步骤N-1,就成了1到N-1的最后一个步骤了,也就是问题的结果,按上序方法,依次类推,做到第N个最后一个步骤的时候,问题也就解决了:)
上面的兄弟不要这样去说别人,你们刚学的时候我想也差不了多少,
这位兄弟你多去看几遍递归,你一暄会懂的,
唉,我也是啊,在实际生活中碰到问题时,我还是会本能地用普通办法去解决,只是在今后想了才会考虑一下递归的方法。。。。。。
递归有点像递推,不过是让计算机去推.相信你在中学学过数学归纳法的吧.
递归的最终返回处(相当于归纳法应用时的a1项)必须要指定,其余的推理就留给计算机去作吧.
递归就是对大问题分解成小问题(大规模问题分解成小规模问题)的模拟,首先要在大问题和小问题之间存在着递归的关系,另外还要知道递归的工作方式。
会用差分迭代吗
不管是N还是N-1 一把视为平等 只要数理方程即可
在实际程序设计中,应尽量避免使用递归方式调用,因为递归调用方式会大量消耗内存资源。
其实 递归是用将问题缩小后可以用原来方法解决的一种思路
C PASCAL的递归应该不难理解
如果你看懂了GWBASIC的汉洛嗒递归程序 你应该对递归的看法上升了一个档次
强烈建议你看GWBASIC的汉洛嗒递归程序
把每一步都画出图来,仔细分析每一步,这样多做几道题,就过关了,如果想说好,唯一的办法主是多做题,与智商无关。