函数的递归有输出语句,运行后,不明白其输出顺序

想用函数的递归输出斐波那契前5数,后来发现实现不了,但是根据这个错误代码,不明白这几个数字输出顺序

img

递归是个U字型的

在执行时,是先得到f(1),再是f(2),...,f(n)

执行递归函数将反复调用其自身,每调用一次就进入新的一层,当最内层的函数执行完毕后,再一层一层地由里到外退出。

可以认为是一个U字型,先调用到最底层,然后再一层层的退出获取每层的结果

每一个递归函数都应该只进行有限次的递归调用,否则它就会进入死胡同,永远也不能退出了,这样的程序是没有意义的。

要想让递归函数逐层进入再逐层退出,需要解决两个方面的问题:

  1. 存在限制条件,当符合这个条件时递归便不再继续。对于 factorial(),当形参 n 等于 0 或 1 时,递归就结束了。

  2. 每次递归调用之后越来越接近这个限制条件。对于 factorial(),每次递归调用的实参为 n - 1,这会使得形参 n 的值逐渐减小,越来越趋近于 1 或 0。


在这里补一句 cout << "这是fun(" << n << ")" << endl; ,有助于理解怎么调用

img