【C++】递归方法解决问题汇总(1)

一、递归:函数的嵌套调用

我们知道,函数不能嵌套定义,但是可以嵌套调用。嵌套的层数无限制:
在这里插入图片描述
以编程实现阶乘算法为例:
在这里插入图片描述
在方法fact的定义中,又不断地调用自身以实现阶乘。事实上,这一种递归调用和普通调用没有区别。fact函数中这个被递归调用的fact函数可以理解为只是另外一个函数,而这个函数恰好是原函数的拷贝。

在这里插入图片描述
二、递归的过程

在学习C++函数的时候我们知道,在main函数里调用子函数,相当于在内存开辟了一块临时空间。当子函数执行完毕时,这块临时空间将被释放,程序执行的流程回到从调用结束的地方继续往下执行。这一点与单片机里的中断机制有些类似。因此,在编写递归的流程时要特别注意。以下面的输入输出字符串的程序为例子:
在这里插入图片描述
编译并执行这段程序。当用户在键盘输入 abc并回车确认 ,程序的输出是什么呢?
答案是一个回车换行符,然后是字符cba。

可以这么理解,当主函数调用了子函数recur(),程序中断并进入到子函数里。接着,用户输入了第一个字符’a’,因为程序没有接收到换行符’\n’。又触发调用了一次recur(),此时可以理解为再一次触发中断,进入到了第二次调用的recur()子函数里(记为recur2)。以此类推,当第四次递归调用recur(),用户输入换行符‘\n’时,终于在recur4得到了返回值并且释放。接着回到了recur3并输出c,然后回到recur2并输出b…以此类推我们得到的输出便是‘\n’ c b a。


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部