我是靠谱客的博主 懦弱老虎,最近开发中收集的这篇文章主要介绍栈的递归调用,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

所谓递归,就是程序调用自身的过程,它可以把一个大型的,复杂的问题层层转化为一个与原问题相似的,规模较小的问题来求解,递归策略只需要少量的代码就可以描述出解题过程中所需要的多次重复计算,大大地减少了程序的代码量。
一般来说,递归需要有临界条件:递归前进和递归返回段。否则,递归将无线调用,永远无法结束程序,最后会造成内存崩溃。
递归作为一种算法在程序设计语言中被广泛应用,例如,在数学运算中经常遇到计算自然数和的情况,假设要计算1到n之间的自然数之和,就需要先计算1加2的结果,用这个结果加3再得到一个结果,用新得到的结果加4,以此类推,直到用1~(n-1)之间所有数的和加n,此题就可以用递归来解决。

#include<stdio.h>
#include<stdlib.h>
#pragma warning(disable:4996)
int getSum(int n)
{
if(n==1)
return 1;
int temp=get(n-1);
return temp+n;
}
int main()
{
int sum=0;
int n=0;
printf("请输入n的值:n");
scanf("%d",&n);
sum=getSum(n);
printf("结果:%dn",sum);
system("pause");
return 0;
}

整个递归过程中getSum( )函数被调用了4次,每次调用时,n的值都会减1。当n的值为1时,所有递归调用的函数都会以相反的顺序相继结束,所有的返回值会进行累加,最终得到的结果是10。
事实上,计算机在运行过程中都是用栈来存储程序中的变量,函数等,当定义了一个变量,变量入栈,使用完毕后就出栈。在递归运算时,函数也不断地被调用进栈,当运行完毕后再依次出栈。接下来就分析上述程序的递归调用过程。
(1)当传入参数n=4时,调用getSum( )函数,getSum( )函数入栈,运行函数内代码;
(2)步骤(1)中再次调用getSum( )函数,参数值为3,则getSum( )再次入栈;
(3)步骤(2)中再一次调用getSum( )函数,参数值为2,则getSum( )函数再次入栈…以此类推,直到n=1时,getSum( )函数最后一次入栈,此时栈中的情况;
(4)当n=1时,返回值为1,返回给上次函数调用,则此次函数调用失败,函数出栈;
(5)当n=2,调用的函数得到的出栈的函数返回的值时,就计算出了它这一步调用的结果,将结果返回后,本次调用结束,函数出栈。
(6)以此类推,直到第一次函数调用(n=4时)结束,将计算出的结果返回,然后弹栈。
这就是递归在栈中实现的执行和回退过程,回退过程的顺序是执行过程中的逆序,下一次调用都为上一次调用提供需要,显然这很符合栈的特点,编译器就是利用这个特点来实现递归管理的。当然,对于现在的高级语言来说,这样的递归,以及程序中变量的管理是不需要程序员自己来操作的,一切都是由操作系统执行,但读者也需要理解其原理。

最后

以上就是懦弱老虎为你收集整理的栈的递归调用的全部内容,希望文章能够帮你解决栈的递归调用所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(52)

评论列表共有 0 条评论

立即
投稿
返回
顶部