递归过程如下:
第一次进入:n==3, 执行的是 p[0]+f(&p[1],2)这样的话会继续调用函数f,也就有了第二次进入。
第二次进入:表达式变成了p[0]+p[1]+f[&p[1],1],这样的话会继续调用函数f,也就有了第三次进入。
第三次进入:n==1, p[0]+p[1]+p[2].
return (p[0]+f(&p[1],2)=p[0]+p[1]+f[&p[1],1]=p[0]+p[1]+p[2])-->return p[0]+p[1]+p[2]
递归一般是出于效率的要求,当然你这个没什么影响。递归也不是用在这里的。看递归要干什么很简单,看两点:1.递归退出条件是什么,退出时的返回值;2.递归时在做什么。
下面是测试的结果:
测试结果
思路:先通过程序获得阶乘的值,之后再将阶乘相加,求阶乘时和相加时都用递归的写法
首先是求阶乘:
int factorial(int index){
int sum = 0
if (index == 1){
sum = 1
}else{
sum = index * factorial(index-1)
}
return sum
}
之后再求和:
int add_recursion(int maxnum){
int sum = 0
if (maxnum == 1){
sum = factorial(maxnum)
}else{
sum = factorial(maxnum) + add_recursion(maxnum-1)
}
return sum
}
下面是完整的代码:
完整代码
程序调用自身的编程技巧称为递归( recursion)。递归做为一种算法在程序设计语言中广泛应用。 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解。
递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。
一般来说,递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。
扩展资料:
递归的应用
1、数据的定义是按递归定义的。(Fibonacci函数)
2、问题解法按递归算法实现。这类问题虽则本身没有明显的递归结构,但用递归求解比迭代求解更简单,如Hanoi问题。
3、数据的结构形式是按递归定义的。
递归的缺点
递归算法解题相对常用的算法如普通循环等,运行效率较低。因此,应该尽量避免使用递归,除非没有更好的算法或者某种特定情况,递归更为适合的时候。在递归调用的过程当中系统为每一层的返回点、局部量等开辟了栈来存储。递归次数过多容易造成栈溢出等。
参考资料来源:百度百科-递归
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)