【问题标题】:I dont understand how following C language code gives output as 22我不明白以下 C 语言代码如何输出为 22
【发布时间】:2018-04-18 17:30:47
【问题描述】:
#include<stdio.h>

int rec(int num)
{
    return(num) ? num % 10 + rec(num / 10) : 0;

}
int main()
{
    printf("\n%d\n", rec(4567));
}

使用的IDE是visual studio 2017 64 bit。

【问题讨论】:

  • 使用调试器单步调试代码。用笔和纸写下中间值。
  • 你知道recursion是什么吗?
  • 我愿意。但是使用三元运算符我无法可视化代码的工作。
  • OK - 重写它以避免三元运算符,(无论如何都不是一个坏计划,恕我直言:)。加入一些临时变量以获得额外的清晰度和易于调试。如果你有能力,解雇原作者:)

标签: c output logic


【解决方案1】:

看起来它正在计算每个数字 mod 10(第一次运行是 4567 % 10 = 7)。然后它递归地运行 (rec(num/10)),在 456 上调用函数,然后在 45 上,然后在 4 上。

由于它是将它得出的数字添加到递归函数 (num % 10 + rec(num / 10)),因此您的函数只是添加 (4567 % 10 + 456 % 10 + 45 % 10 + 4 % 10),即 7 + 6 + 5 + 4 = 22。

【讨论】:

  • 谢谢你,终于明白其中的逻辑了,这问题困扰了我两个小时,现在我可以安心睡觉了,再次谢谢你。
猜你喜欢
  • 2019-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多