递归是循环吗 递归的通俗解释
递归在函数体中调用自己。如果不受控制,它将继续调用自身,直到堆栈溢出。循环是区域内一段代码的重复执行,如果不加以控制,就会形成死循环。所以无论是递归还是循环,都必须设置一定的条件来结束递归或循环。在实际问题中,有一些问题是递归的。用递归程序来解决这样的问题会感觉更自然,程序也会更简单。然而,递归经常调用函数,并且开销(内存、时间)很大。有些问题不适合使用。循环不需要自己调用,甚至不能调用函数,效率很高。然而,递归应该改为非递归递归递归和迭代是两种循环。简单地说,递归就是反复调用函数本身来实现循环。迭代是由函数中的某些代码实现的循环。迭代与普通循环的区别在于,循环代码中参与运算的变量也是保存结果的变量,当前保存的结果是下一次循环计算的初始值。在递归循环中,当满足终止条件时,循环将逐层返回。迭代使用计数器结束循环。当然,在许多情况下,各种循环是混合的,这取决于具体的需要。递归示例,例如,给定一个整数数组,使用半查询返回数组中指定值的索引,假设数组已排序。为了便于描述,假设所有的元素都是正数,数组的长度是2的整数倍。半查询是一种查询,它比遍历所有元素快得多。Int find(Int*ari,Int index,Int len,Int value){if(len==1)//最后一个元素{if(ari[index]==value)return index//查询返回索引return-1//查询失败,返回-1}//如果长度大于1,执行半递归查询int half=len/2//检查检查值是否大于上半部分的最后一个值。如果是,则递归查询第二部分If(value>ary[index half-1])return find(ary,index half,half,value)//否则递归查询上部分return find(ary,index,half,value)}迭代。经典的例子是实数的累加,例如计算从1到100的所有实数之和。int v=1对于(i=2i<=100i){v=vi}
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。