求教递归问题

xkyylly 2003-10-15 10:25:59
不太明白 其中,
unsigned long factorial( unsigned long );


int main()
{
for( int i= 0; i <= 10; i++ )
cout << setw( 2 ) << i << "! = " << factorial( i ) << endl;

return 0;
}

unsigned long factorial( unsigned long number )
{
if ( number <= 1 )
return 1;
else

return number * factorial( number - 1 );

}


哪位大侠帮讲解一下 , 上面的最后一句, 请问factorial( number - 1 )这个最后赋值到哪里? 然后再从哪里调用?
既然 number - 1 那么上面的的number是不是每次都减一然后赋值给自己?
谢谢啦…………
...全文
88 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Wolf0403 2003-10-15
  • 打赏
  • 举报
回复
效果就是这样的。但是每次调用都保存了一个 number 的本地拷贝,所以如果递归过深会引发栈溢出
xkyylly 2003-10-15
  • 打赏
  • 举报
回复
恩, 谢谢你们啊…………
daizh 2003-10-15
  • 打赏
  • 举报
回复
楼主明白了,就是那样的
xkyylly 2003-10-15
  • 打赏
  • 举报
回复
实际是,也就是 number*(number-1)*(number-2)*(number-3)*(number-4)

是不是?
nbb 2003-10-15
  • 打赏
  • 举报
回复
以5为例:(函数简写成 f)

调用链:
返回值= f(5)-> 5*f(4)-> 5*4*f(3)-> 5*4*3*f(2)-> 5*4*3*2*f(1)-> //f(1)已经到底

5*4*3*2*1

返回链:
返回值<- 5*f(4)<- 5*4*f(3)<- 5*4*3*f(2)<- 5*4*3*2*f(1)<- 5*4*3*2*1
| | | | |
f(5) f(4) f(3) f(2) f(1)
xkyylly 2003-10-15
  • 打赏
  • 举报
回复
那 下面的是不是 number*(number-1)*(number-2)*(number-3)*factorial(number-4) ?
daizh 2003-10-15
  • 打赏
  • 举报
回复
number*(number-1)*(number-2)....1它是求number!

1、number*factorial(number-1)
2、number*(number-1)*factorial(number-2)
3、number*(number-1)*(number-2)*factorial(number-3)
.
.
.

69,364

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧