【问题标题】:What does `return 1 + strlen_rec(&arr[1]) ;` mean?`return 1 + strlen_rec(&arr[1]) ;` 是什么意思?
【发布时间】:2016-11-29 08:16:39
【问题描述】:

我有一些代码:

int strlen_rec(char arr[])
{

    if(arr[0]=='\0')
        return 0;
    else
        return 1 + strlen_rec(&arr[1]) ;
}

线

return 1 + strlen_rec(&arr[1]) ;

让我很困惑。有人能解释一下它的作用吗?

【问题讨论】:

  • 阅读递归。
  • 并尝试使用调试器逐行执行代码。
  • 这里没有问题!!!
  • 在阅读递归时,还要注意作为递归一部分的每个连续函数调用所需的额外开销,并建议避免递归,除非程序解决方案令人望而却步。递归并没有错,它可以解决一些有趣的问题——也就是说,要注意它会带来额外的负担。
  • @DavidC.Rankin:在这里阅读“字里行间”时,我倾向于猜测 OP 需要先关注基础知识,然后再考虑与效率相关的考虑。

标签: c return


【解决方案1】:

此函数使用递归计算字符串的长度。它可能看起来很混乱,因为它使用了一个像指针这样的数组。 &ar[1] 正在增加指针(使用下一个字节的地址调用函数)。 C 字符串以不包含在长度中的空字节终止,因此在到达时返回 0。

【讨论】:

    猜你喜欢
    • 2022-06-16
    • 2021-05-25
    • 2022-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-18
    • 2019-11-19
    相关资源
    最近更新 更多