4-4编程练习疑惑还请讲解

4-4编程练习疑惑还请讲解

问题描述:

我看了其他学员的问题以及解答,但依然不能理解为何算法中没有包括本金却不影响运算。

我能理解第一个fn(y-1)的意思,即为前一年,但是前一年并没有与涨幅相乘,也没有本金参与,算法是怎么理解本金的存在的?此处只有出口提到过本金10000元的存在;

而第二个fun(y-1)倒是与涨幅相乘,但依然没有与本金结合运算,还是说递归出口的这个“return 10000”就已经声明了本金的参与?但是它的条件不是y == 1么,在后面的函数调用中y其实被赋值为20,所以这个本金是怎么被计算在函数内的?

相关截图:

http://img1.sycdn.imooc.com//climg/6079222f09ca7b2213860992.jpg

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

3回答
好帮手慕慕子 2021-04-16 19:01:44

同学你好,对于你的问题解答如下:

1、可以将y-1理解为与for循环中的i--作用一样。

2、递归函数是先从第三年开始计算,依次递减到第一年,也就是y等于1,同学说的递归结束的出口。

http://img1.sycdn.imooc.com//climg/60795ff50945a8a813560622.jpg

但是第三年怎么计算呢,你不可能突然就知道第三年的本金吧,是不是需要根据第二年来计算,那第二年怎么计算呢,是不是要根据第一年来计算。所以实际计算过程中会根据已知的第一年的本金去推算第二年的工资,得到第二年的工资后,才能去推算第三年的工资吧。

​3、下图的理解没问题

http://img1.sycdn.imooc.com//climg/6079604109ce510806890092.jpg

在第二条中老师也指出了递归是一个递减的过程,但实际计算的过程是从第一年开始往后推算的哦

祝学习愉快~

  • 提问者 白妖 #1

    所以其实,虽然递归的算法是以“i--”进行,但实际上对于函数本身来说是以“i++”执行?

    我可否将这个过程理解成一个独立的容器,容器里的y先根据值(如是3)分成3个部分,以递增的方式计算“1+2+3”,等全部都算完了,各有各的值了。再跳出这个独立容器,再将实参(比如3)以“i--"的方法取得与判断语句“if y == 1”的共鸣?

    2021-04-16 19:28:15
  • 好帮手慕慕子 回复 提问者 白妖 #2

    同学你好,可以这样理解,祝学习愉快~

    2021-04-17 09:33:04
好帮手慕慕子 2021-04-16 15:12:34

同学你好,20年这个数字比较大,老师以3年为例,给同学梳理下代码执行的过程。可以结合下图理解:

http://img1.sycdn.imooc.com//climg/607938720900cb2614230633.jpg

所以当y等于1时,返回的10000,即是递归的出口,也是参与计算的本金。

祝学习愉快~

  • 提问者 白妖 #1

    所以这里的(y-1)结合递归函数其实就等于for循环中的“i--”?

    那也不对啊,按老师你给的逻辑,我们首先得到了fn(1)为10000之后,才能基于此陆续得出10500、11025这样第二年、第三年的值。

    如果是i--的话,最先被计算的不应该是第三年的值么,然后再通过递减逐步获取第二年的值。但是这样一来,先计算第三年,已知的本金却只有第一年的10000,逻辑不通啊

    2021-04-16 17:35:45
  • 提问者 白妖 #2

    我是基于那条递归出口的判断语句,认为这是一个递减的运算,当3减1,再2减1,最后当y == 1时,直接跳出递归。

    2021-04-16 17:38:00
好帮手慕慕子 2021-04-16 13:56:35

同学你好,判断y等于1时,return 10000 这里就可以看做是本金的参与,因为要计算20年后的工资,可以从当前年份的工资10000, 也就是y等于1时,往后推,也就是下图中的计算方式

http://img1.sycdn.imooc.com//climg/607926ec091eb9b810710310.jpg

祝学习愉快~

  • 提问者 白妖 #1

    可是,这里的y==1只是一个if条件啊,真实情况是在调用fn函数时,y是被赋值为20的。而且,这里的if语句其实将(y == 1) return 10000囊括在一个花括号里,理论上跟下面的“return fn(y - 1) + fn(y - 1) * t”早已经没有交集了吧?

    2021-04-16 14:44:01
  • 提问者 白妖 #2

    而且如果return 10000是指本金参与的话,那不就与“递归出口”这个定义相悖了么?我有点糊涂了。

    这条if语句不应该是指当y==1时,返回10000么。这样看来,它更像是个起点条件,而非终点条件

    2021-04-16 15:01:05
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师