【问题标题】:How does the print statement gets executed four times here? [duplicate]print 语句是如何在这里执行四次的? [复制]
【发布时间】:2013-08-24 14:17:31
【问题描述】:

直到i 的值保持大于0,main() 才会被递归调用。一旦它变成0,就违反了 if 条件。任何人都告诉我打印语句是如何执行的。当我运行它时,我得到了输出0000。谢谢

void main()
{
    static int i=5;
    if(--i)
    {
        main();
        printf("%d",i);
    }
}

【问题讨论】:

标签: c recursion static


【解决方案1】:
i = 4
call main()
    i = 3
    call main()
        i=2 
        call main()
            i=1
            call main()
                i=0
            print 0
         print 0
    print 0
print 0

记住istatic,所以它对函数的所有调用都是通用的。

【讨论】:

  • 静态部分能看懂,为什么print语句执行了4次?
  • @user1870724 到底是什么让你感到困惑?我的示例显示了 4 个打印件的确切位置、时间和原因。
  • 我以为打印语句只会被调用一次。这让我很困惑。我不清楚控制流程。
【解决方案2】:

本地静态变量将存储最新修改的值。因为你递归调用main(),static i会从4变为0,当i变为0后,它会停止调用main()并返回上一级,然后printf 0(i现在为0)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-16
    • 2020-11-17
    • 1970-01-01
    • 1970-01-01
    • 2016-08-17
    • 1970-01-01
    相关资源
    最近更新 更多