网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
03月05日漏签0天
c++吧 关注:653,666贴子:2,117,987
  • 看贴

  • 图片

  • 吧主推荐

  • 游戏

  • 3回复贴,共1页
<<返回c++吧
>0< 加载中...

递归,感觉好难啊.....能告诉下这个程序的思路吗?

  • 只看楼主
  • 收藏

  • 回复
  • _老虎打武松_
  • ,
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
#include <iostream.h>
long factorial (long a){
if (a > 1) return (a * factorial (a-1));
else return (1);
}
int main () {
long l;
cout << "Type a number: ";
cin >> l;
cout << "!" << l << " = " << factorial (l);
return 0;
} 
————————————————————————
long factorial (long a){
if (a > 1) return (a * factorial (a-1));
else return (1);
}
特别是这段,搞不懂他怎么一直相乘的,好像没循环啊,还有return 1是什么意思?


  • saveyourself8
  • ,
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
求阶乘的.a!.return (1)表示函数调用结束


2026-03-05 10:57:16
广告
不感兴趣
开通SVIP免广告
  • x三叶玫瑰y
  • &&
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
例如说fac(4);
fac(4)里面a = 4;
a>1所以打算返回一个a*fac(a-1).
而这一句话又使用了fac(3).
所以等待fac(3)返回一个值来计算
而fac(3)打算返回3*fac(2)
fac(2)打算返回2*fac(1)
-----------
fac(1)返回的是1,返回后计算它的上一步的等待,就是2*fac(1) = 2;fac(2)返回2.
交给3*fac(2) (而fac(3)打算返回3*fac(2))
再返回给fac(4),就做完了。
这里return (1);是关键,因为没有它将会一直请求下一个a*fac()永远找不到尾了.


  • _老虎打武松_
  • ,
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
谢谢LS的


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 3回复贴,共1页
<<返回c++吧
分享到:
©2026 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示