第七章C语⾔函数_C语⾔多层递归函数(最烧脑的⼀种递归)“多层递归”是我⾃⼰起的名字,意思是在⼀个函数⾥⾯多次调⽤⾃⼰。
多层递归的调⽤关系⽐较复杂,整体上看起来像⼀颗倒⽴的树:对于双层递归,树的每个节点有两个分叉;对于三层递归,树的每个节点有三个分叉;以此类推……
下⾯我们以「求菲波那契数」为例来演⽰双层递归,更多层次的递归请读者⾃⼰探索。
菲波那契数就是⼀个数列,数列中每个数的值就是它前⾯两个数的和,这种关系常常⽤以下形式进⾏描述:
这种形式很容易让⼈使⽤递归,下⾯给出C语⾔代码实现:
运⾏结果:
Input a number: 7↙
Fib(7) = 13
当 n≥2 时,每次调⽤ fib(n) 都要等待 fib(n-1) 和 fib(n-2) 的结果,这种调⽤关系看起来就像⼀棵倒⽴的⼆叉树,如下图所⽰:
编程递归函数
双层递归的调⽤关系和数据结构中的结构完全吻合,所以双层递归常⽤于⼆叉树的遍历。
单层递归每次只等待⼀个函数的结果,双层递归每次要等待两个函数的结果,这就是它们之间最本质的区别。
如果你觉得这还不够复杂,还可以将双层递归和尾递归结合起来,我相信这⾜够杀死你的⼀⽚脑细胞了,有兴趣的话可以⾃⼰探索,我就不奉陪了 ^_^
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论