| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1140 人关注过本帖
标题:不明白,要多问。
只看楼主 加入收藏
编译中。。
Rank: 7Rank: 7Rank: 7
来 自:中国
等 级:黑侠
帖 子:198
专家分:511
注 册:2011-7-29
收藏
得分:0 
那你帮我分析一下,整个流程

即我在这个程序 输入1个 4.     程序执行  :4被赋到了x里,x的值 被赋到了a 里。 即a等于4。  这之后 你帮我分析一下,他将会干什么,详细点 好不

 当我感到些许疲倦时   便想躺在阳光下,小路旁 . 可这些往往都是奢望..
2011-08-02 18:07
风生钧起
Rank: 4
来 自:江西
等 级:业余侠客
帖 子:383
专家分:246
注 册:2011-7-26
收藏
得分:0 
  授人   以渔  
那人来教估计也只会教到a *= factorial(a-1);
  


`
`
`

墨一世红颜倾醉己    霁天谁与话风流

修仙``````````````````````````````````````````````
2011-08-02 18:12
编译中。。
Rank: 7Rank: 7Rank: 7
来 自:中国
等 级:黑侠
帖 子:198
专家分:511
注 册:2011-7-29
收藏
得分:0 
听不懂。。。。。,饿    自己能弄明白就不来问了

 当我感到些许疲倦时   便想躺在阳光下,小路旁 . 可这些往往都是奢望..
2011-08-02 18:14
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
收藏
得分:0 
回复 21楼 编译中。。
函数调用堆栈是这样的:

fatorial(4)
    factorial(3)
        factorial(2)
            factorial(1)
            return a        // from factorial(1), 1
        return a            // from factorial(2), 2
    return a                // from factorial(3), 6
return a                    // from factorial(4), 24

清楚么?
2011-08-02 18:19
编译中。。
Rank: 7Rank: 7Rank: 7
来 自:中国
等 级:黑侠
帖 子:198
专家分:511
注 册:2011-7-29
收藏
得分:0 
以下是引用voidx在2011-8-2 18:19:41的发言:

函数调用堆栈是这样的:
 
fatorial(4)
    factorial(3)
        factorial(2)
            factorial(1)
            return a        // from factorial(1), 1
        return a            // from factorial(2), 2
    return a                // from factorial(3), 6
return a                    // from factorial(4), 24
 
清楚么?
能详细点不,  ()里的值 因为什么 而 一直递减,详细点

 当我感到些许疲倦时   便想躺在阳光下,小路旁 . 可这些往往都是奢望..
2011-08-02 18:23
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
收藏
得分:0 
函数第一次执行时,a == 4
即调用 factorial(4)
当执行到 a *= factorial(a - 1) 时,a - 1 == 3,
所以调用 factorial(3)

这时候,下面的 return a; 并不会执行,要等到 factorial(a - 1) 返回,a *= factorial(a - 1); 执行结束后,下面的 return a; 才会被执行。

而在执行 factorial(a - 1) 的过程中又会再次调用 factorial() 这个函数,直至 a == 1 为止

[ 本帖最后由 voidx 于 2011-8-2 18:30 编辑 ]
2011-08-02 18:26
编译中。。
Rank: 7Rank: 7Rank: 7
来 自:中国
等 级:黑侠
帖 子:198
专家分:511
注 册:2011-7-29
收藏
得分:0 
回复 26楼 voidx
a *= factorial(a - 1) 时,   这里的时候  a不是等于 a *= factorial(a - 1)  那a应该是3*4==12  而下一次为什么又成了 3-1??

 当我感到些许疲倦时   便想躺在阳光下,小路旁 . 可这些往往都是奢望..
2011-08-02 18:31
编译中。。
Rank: 7Rank: 7Rank: 7
来 自:中国
等 级:黑侠
帖 子:198
专家分:511
注 册:2011-7-29
收藏
得分:0 
奥。我好像有点动了。   我 先 整理一下

调用 factorial(3)  时 a *= factorial(a - 1)  执行了吗?

[ 本帖最后由 编译中。。 于 2011-8-2 18:36 编辑 ]

 当我感到些许疲倦时   便想躺在阳光下,小路旁 . 可这些往往都是奢望..
2011-08-02 18:32
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
收藏
得分:0 
当然啊,因为 a == 3 > 1 所以会再一次执行 a *= factorial(a - 1)。只不过这时候 a == 3,a - 1 == 2,所以调用的是 factorial(2)
2011-08-02 18:38
编译中。。
Rank: 7Rank: 7Rank: 7
来 自:中国
等 级:黑侠
帖 子:198
专家分:511
注 册:2011-7-29
收藏
得分:0 
a与刚才的不是同一个?  因为执行了 a *= factorial(a - 1) 之后 a的值不就变大了?  a=4*factorial(4-1); 不是吗。a就变成了 12 了  为什么下次还会是 3-1==2 呢。  a 难道 是不同的?

 当我感到些许疲倦时   便想躺在阳光下,小路旁 . 可这些往往都是奢望..
2011-08-02 18:42
快速回复:不明白,要多问。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.083503 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved