永发信息网

c++递归函数问题

答案:2  悬赏:10  手机版
解决时间 2021-03-28 11:00
  • 提问者网友:浮克旳回音
  • 2021-03-27 21:17
c++递归函数问题
最佳答案
  • 五星知识达人网友:老鼠爱大米
  • 2021-03-27 21:41
这是一个很经典的递归示例。
这个return f就是把f的值返回呀。

比如,阶乘的定义就是这样的:
当n >1 时,n! = (n-1)!*n,
当n = 0时,n! = 1.

上面的程序写的就是这东西呀:
当n == 0 时,f = 1,
否则,f = n! = (n-1)! * n;
然后返回f。

再回答你的问题吧:
具体返回哪个f值,看n的值,当n == 0的时候,f = 1.当n != 0 的时候,f = (n-1) * n.追问不太懂在else下面的语句,不是有个fac(0)的吗,当fac(0时)不是n=0吗?不是输出f=1吗?追答是这样的
如果运行到else支配的语句,也就是
f = fat(n-1) * n.
那么 f 会被赋值为 fat(n-1)的结果,再乘以 n.
fat(n-1)会重新运行一遍这个函数(之前的n会被保存,两次运行互不影响),并且第二次运行的时候,fat里的n比上次运行的小1.

这句话翻译成数学形式会更形象一点:
f = fat(n-1) * n
相当于:
f = (n-1)! * n
= (n-1) * (n-2) * .. * 1 * n (把阶乘展开)
= n * (n-1) * (n-2) * ... * 1 (把n放到前面去)
其中(xxx)!就是对xxx求阶乘。在程序中写成fat(xxx).

这样说,能理解不?追问else
f=fac(n-1)*n
return f;

在什么情况下返回else下面的f?追答先说一下else,
else 永远需要和if配对,和同一层的上一个if配对。
然后回答你的问题:
当上一个if失败的时候,就会执行else所支配的语句。

其实这段程序,无论什么情况都返回f。只是在不同的情况下,f的来源不同而已。
-----------------------------------------------------------------------------------
说点额外的:
if的语法大概是这样的:
if(条件) 语句
else 的语法是这样的:
else 语句
什么是语句,教科书上面有说明。

你的提问会让人感觉你对教科书上面的基本知识了解比较浅;或是把一些知识认为了成自己想当然的那样。当实际情况和你所想的不一样的时候,很可能会出现疑惑。

虽然大部分教科书写得比较烂,但是在学习的时候,看教科书最好不要略读,最好每一句话都至少看过并且理解。这些知识在书上其实是写得比较清楚的。

当然,如果你不打算深入学习计算机,就当我没说吧。

有问题欢迎继续追问。追问我是大一的,刚开始学c++
全部回答
  • 1楼网友:第四晚心情
  • 2021-03-27 23:17
如果是上源码,有兴趣写一下
~追问我可以拍下来在书上的
不明白哪里return,f那个地方
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯