c - C代码的区别?

标签 c function while-loop infinite-loop decrement

代码 1:-

int f(int val) {
    int x=0;
    while(val > 0) {
        x = x + f(val--);
    }
    return val;
}
<小时/>

代码2:-

int g(int val) {
    int x = 0;
    while(val > 0) {
        x= x + g(val-1);
    }
    return val;
}
<小时/>

代码f(3)g(3)的执行有什么区别?

<小时/>

代码 1 对我来说非常清楚。然后f(3)会不断调用自身,越来越深,当用于跟踪递归函数的空间被填满时,我们会得到堆栈溢出错误。

但是,我实际上陷入了第二段代码的执行。我运行它并得到无限循环。

另外,我读到val--可以写成val-1。那么,我在解释 val-1 行时出错了,因为它们的行为完全不同。

最佳答案

val-- 相当于 val = val -1,因此它将 val 的值减 1 并将新值存储为好(递减)。而 val -1 只是减少并返回新值,而不将其存储在变量 val 中(没有实际的递减发生)。这就是为什么你有一个无限循环。我建议进行以下更改:

int g(int val) {
    int x = 0;
    while(val > 0) {
        val = val - 1;
        x= x + g(val);
    }
    return val;
}

这里是关于减量和增量运算符的引用:http://en.cppreference.com/w/cpp/language/operator_incdec

关于c - C代码的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42744404/

相关文章:

c - 循环中的变量定义

c - 为什么我能够像这样将新字符串重新分配给 C 中的 char 指针(ch *string = "hello"; string = "assign";)

c - printf char* 指向 long 和 float 的指针

c - 查找字符串是否是 C 中的迭代子字符串算法?

c - c语言中的while语句怎么写?

javascript - 使用 do...while 或 while 循环进行暴力破解

c - 这个程序有什么作用? (数组+函数)

c - 如何编写一个原型(prototype)为 'void convertstring(char *)' 的函数,在 C 中将小写字母转换为大写字母?

python - 使用静态方法而不是函数中的子函数的必要性

php - 如何使用由日期和用户名分隔的 while 循环添加列的不同值(行)