2 aaawei1996 AAAwei1996 于 2017.01.15 23:04 提问

递归过程到底是如何进行的

哪位大神能给我完整的讲一下递归调用是如何进行的么?递归的核心思想是什么,他的算法应该如何去写,递归算法的一般格式是什么?谢谢啦

7个回答

yh1276
yh1276   2017.01.16 09:34

我学递归就想到了李小龙的死亡之塔,先一层一层的打下去,当打到最后一层即是到了地底,然后再往回走干正事。

caozhy
caozhy   Ds   Rxr 2017.01.15 23:35
 递归的核心思想是自己调用自己,它的哲学思想是一个事物的局部和整体具有同构性。它的数学思想是,用数学归纳法或者递推的方式描述和解决问题。另外“一个循环,和一个递归的作用是一样的”这个观点片面了。循环必然可以用递归表示,但是递归不一定可以表示循环。

“一个事物的局部和整体具有同构性”,在遍历treeview或者文件系统中体现得很清楚,一个文件夹,它本身可以包含子文件夹或者文件,这是它的内部结构。而文件夹相对于父文件夹,它又是一个大的结构的一部分。
再比如快速排序算法,对数据排序的一种方式是,首先将数据划分成相比较某个特定值小的和大的两堆,全部小的排在前面,全部大的排在后面。对于小的那堆和大的那堆本身,又可以用相同的方式划分成更小的堆。如果每个堆都只有一个数据了,那么构成的排列就是有序的。

至于数学归纳,比如费波拉契数列,就是一个例子,费波拉契数列在数学上用数学归纳法表示为,对于一个数列,第一个和第二个数是1,其余的数,它的值等于它前两项值的和,即f(x) = 1 ... x = 1, 2 f(x) = f(x - 2) + f(x - 1) x > 2

qq_25796431
qq_25796431   2017.01.16 08:53

1.首先要明白你写这个算法是做什么的。
2.算法结束是什么时候
3.相信你写的能完成这个任务。
比如递归求和
int add(n){
if n==1 return 1;
else return n+add(n-1);
}

sycdzdd
sycdzdd   2017.01.16 09:44

1、递归就是调用自身,在减少问题规模后,例如二分查找,分成两半再去查找;2、递归调用需要有出口,也就是在问题规模最小时结果是什么,然后结果不停返回参与上层计算,最终得到最外围调用计算的结果

a15129095654
a15129095654   2017.01.15 23:15

递归不就是在运行过程中调用自己。比如说要求n!,你就可以使用递归
int factorial(int n) {
if (n != 0) {
n = n * factorial(n-1);
}
else {
return n;
}
}

a15129095654
a15129095654 不对,是n != 1
11 个月之前 回复
qq_29594393
qq_29594393   Ds   Rxr 2017.01.15 23:22

递归和普通的函数调用没有任何区别,只不过是调用函数本身 。递归的核心思想是 不确定的多个任务分解为相同的小任务。
其实就是遍历 。和穷举 的一种实现。
例如遍历一个文件夹 下面的所有文件 ,分类不过就是两种 ,文件夹下面就两种情况,一是文件 ,二是文件夹 。如果是文件夹的话继续实现上述方法,就能做到递归。几行代码,就能遍历文件夹所有的文件
再例如累加 ,阶乘
int add(int n){
if(n>0){
return add(n-1)+n
}
return 0;

}
你会发现,一个循环,和一个递归的作用是一样的,不过递归可以无线层级。而循环只是第一层

Z_yichen
Z_yichen   2017.01.15 23:35

问题一:递归是一个函数自身调用自身.
问题二:首先它没有固定的格式,本质是自己调用自身:
为什么要用递归:例:f(l,r)表示一个函数求和在数组区间[l,r];那么它的结果就等于f(l,mid) + f(mid +1,r)对不对;
但是f(l,mid)是不是本质也是f函数只不过是参数改了,也就是说我们在f(l,r)函数的内部分开称两个函数,f(l,mid),f(mid+1,r)则它会先执行这两个函数,算出它们的结果,那么我们的f(l,r)函数是不是结果就出来了,那么f(l,mid)怎么算呢,是不是同理,知道l == mid那么就对应哪一个数组元素了.

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!