注册 登录
编程论坛 C++教室

c++ primerplus的练习题,求解惑

bobobov007 发布于 2015-09-29 13:41, 494 次点击
#include<iostream>
using namespace std;
long long chengjie(long long);
int main()
{
    long long a;
    while (cin >> a)
    {
        long long b;
        if (a == 0 || a == 1)
            b = 1;
        else
        {
            b = chengjie(a);
        }
        cout << b;
    }
}
long long chengjie(long long a)
{
    if (a > 1)
    {
        cout << a <<"第一部"<<endl;
        a = a*chengjie(a-1);//把这儿换成a = a*chengjie(--a);运行结果不同呢
        cout << a <<"第二部"<< endl;
    }
    return a;
}
5 回复
#2
bobobov0072015-09-29 13:42
为啥--a和a-1有不同的结果呢
#3
rjsp2015-09-29 13:48
为什么不呢?
再者,a = a*chengjie(--a); 这是个未定义行为的语句
#4
hjx11202015-09-29 13:55
楼主看哈这段代码就明白为什么结果不一样了

#include <iostream>
int main(){
    int x = 9;
    int y = 9;
    for (int index = 0; index < 10; index++)
        std::cout << "x--= " << x-- << "  :  "
         << "y-1= " << y-1 << std::endl;
    return 0;
}
#5
wmf20142015-09-29 16:39
楼主肯定知道--a等效于a=a-1,这条语句实际改变了a的值,而a-1并不改变a的值,所以结果不一样了。
#6
yangfrancis2015-09-29 18:46
--a对a进行了重新赋值,但a-1执行之后a值不变
1