什么也不会, 2022-05-08 14:28 采纳率: 100%
浏览 14
已结题

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

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

img

  • 写回答

1条回答 默认 最新

  • A-Chin 2022-05-08 14:43
    关注

    递归是个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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 5月16日
  • 已采纳回答 5月8日
  • 创建了问题 5月8日

悬赏问题

  • ¥15 救!ENVI5.6深度学习初始化模型报错怎么办?
  • ¥30 eclipse开启服务后,网页无法打开
  • ¥30 雷达辐射源信号参考模型
  • ¥15 html+css+js如何实现这样子的效果?
  • ¥15 STM32单片机自主设计
  • ¥15 如何在node.js中或者java中给wav格式的音频编码成sil格式呢
  • ¥15 不小心不正规的开发公司导致不给我们y码,
  • ¥15 我的代码无法在vc++中运行呀,错误很多
  • ¥50 求一个win系统下运行的可自动抓取arm64架构deb安装包和其依赖包的软件。
  • ¥60 fail to initialize keyboard hotkeys through kernel.0000000000