关于递归函数的简单认识

  关于递归函数的认识是在学习了数据结构的栈这一概念后有新的理解。

  首先说一下递归函数的概念,我的理解就是一个自己调用自己本身的函数。既然是调用函数,那先看一下普通的函数调用问题。

一、普通函数调用问题

用主函数main()调用函数sum()函数来作比:

void main(){

//其他语句1

sum();

//其他语句2

}

  整个程序运行的入口是main(),当main()函数运行完“其他语句1”遇到sum();语句时,main做的工作就是:

1.保存现场(保存现场这一操作就用到了前面提到的栈)

2.传递参数

  当sum()函数运行结束返回main时,被压栈的“现场”出栈,继续运行“其他语句2”。接下来说递归函数调用问题。

二、递归函数调用问题

  递归函数调用和普通的函数调用的区别就在调用了自己本身,使得理解上有一点困难,用一个例子:

void fun(int n){

if (n=1)

//语句1;

else

fun(n-1);

//其他语句2;

}

  函数执行的过程是,前n-1步都执行的else语句,直到参数值为n-1=1时,“递”的过程才结束,此时才是“其他语句2”的第一次执行,然后才返回参数值为n-1=2这一层函数,

之后是第二次“其他语句2”的执行,以此类推到参数为n这一层函数,这是“归”的过程。

  在“递”的过程中与栈相关的操作是入栈,就是将每一层函数的“现场”压栈;“归”的过程中与栈相关的操作是出栈,就是返回上一层函数时将“现场”出栈。

  总结来说,递归函数就是利用“栈”这种数据结构,从“原点”“递”到最深层,再“归”到“原点”。

转载于:https://www.cnblogs.com/jiangcsu/p/5376429.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值