用户:
bLockTheBlOcK块块查看:2 回复:6 评论:2 创建时间:2018-11-04T19:30:13
大家好
我是【编程几时休】新来的管喵
bLockTheBlOcK
)(*……W*&!@*(*(@(*!#(*
*
**
***
****
*******
*************
*********************
我们来继续学习函数
上一期
我们学习了返回
传送门:
https://www.codemao.cn/wiki/forum/166920
【正片】
我们使用圆形机木输出并调用它们
那么,它能不能调用他自己呢?
别翻,下面是答案
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
显然,按照模块化程序设计的思想,这是允许的。
我们称这种调用为
递归。
递归能够解决生活中的一些实际问题。
例题1
定义一个函数,输入一个数n,就、求n!。
(n!意为n的阶乘,如3!=1*2*3)
我们可以推断出,n!=(n-1)!*n。
找到这个突破口,定义就容易了。
完整程序如下:
仔细看,第二个返回中包含了这个函数自己,这就是递归。
那么,为什么要这样做呢?
解析
一部分:如果n=0,返回1
我测试过,条件只能是n=0,否则会计算错误。
重头戏来啦!
二部分:否则返回n*(n-1)!
仔细看看,和之前的突破口是严格对应的!!!!!!!!!!!
现在我们来调试下
仔细算算,6!=720,完全正确!!!!!!!!!!!!!!!!!!!!!!!
例题2
定义一个函数,求小兔繁殖问题第n月的兔子数。
我们已经有了一个小兔繁殖问题的程序
那么,如何把它函数化呢?
对我来说,这太简单了!!!!!!!!!!
一部分:如果n为1或2,返回一
我们知道,一月和二月都只有一对兔子。
二部分:否则返回前一月的兔子数+前两月的兔子数。
我们知道,在n不等于1或2的时候,兔子的数量为前一月的兔子数+前两月的兔子数。
再结合一些调用了它的操作
最终效果如下:
输入12,结果是144,耶( •̀ ω •́ )y,成功了!
ps:每一次递归,都要储存参数值,返回地址等其他信息
实现这种动态分配内存的玩意叫“栈”,它的容量是有限的
所以可能出现这种错误
这个时候,要注意你输入的是个什么东西哦!
好了,这一节编程几时休结束了,下次不见不散!
我是有底线的帖子我是有底线的帖子我是有底线的帖子我是有底线的帖子我是有底线的帖子我是有底线的帖子我是有底线的帖子我是有底线的帖
by bLockTheBlock
unsigned long long Fibonacci(int x){
if(x==1||x==2) return 1;
return Fibonacci(x-1)+Fibonacci(x-2);
}
点赞0
评论