【问题标题】:Doing iterative function before recursion implementation在递归实现之前做迭代函数
【发布时间】:2016-03-01 16:39:55
【问题描述】:

我正在为 C 语言考试而学习,今天我很难实现我被告知的递归,但我确实使用迭代函数实现了它,然后我不知何故发现我可以轻松地使其递归。例如:(该函数的目的是从右到左查找0-9之间的字符,将它们从char转换为int并按顺序打印)

示例:

char chArray[] = { '2','4','e','b','c','@','0' };
    printf("%d", buildNumber_rec(chArray, 7));

迭代:

int buildNumber(char chArray[], int n){
    int i,num=0;
    for(i=0;i<n;i++)
        if(chArray[i]>='0' && chArray[i]<='9')
            num=10*num + (chArray[i]-'0');
    return num;
}

递归:

int buildNumber_rec (char chArray[], int n){
    char last=chArray[n-1];
    if(!n) return 0;
    if(last>='0' && last<='9')
        return (last-'0')+10*buildNumber_rec(chArray,n-1);
    return buildNumber_rec(chArray,n-1);
}

输出:

240

我知道这听起来太笼统了,但是是否可以通过首先用迭代函数实现递归练习来了解如何解决递归练习?换句话说,通过首先进行迭代来发现如何递归求解的模式(如果,诅咒,这是我唯一的选择 - 意思是,我不知道如何递归求解)。

【问题讨论】:

  • 把递归想象成迭代操作堆栈数据结构。
  • “如何通过首先使用迭代函数实现递归练习来解决递归练习” - 不太清楚这是什么意思,介意详细说明吗?
  • 请注意,如果 n 为 0,则 charArray[n-1] 未定义。先做测试。
  • 通常会尝试避免递归并以相反的方式进行:使用迭代重新实现递归算法。原因是摆脱堆栈。现代编译器通常会自动将尾递归转换为迭代循环。
  • @IlanAizelmanWS 好的,给出你的例子和我自己的经验。简短的回答是:我认为这是可能,但我不确定它是否总是可能

标签: c recursion


【解决方案1】:

首先迭代地做某事可以帮助您了解问题的解决方案。一旦您理解了这一点,您就可以稍后将其重构为递归函数。如果这可以帮助您理解所有内容,那很好。了解正在发生的事情是重要的部分,而不是您执行的顺序。

【讨论】:

    猜你喜欢
    • 2019-04-03
    • 2016-03-01
    • 2021-12-31
    • 2012-10-17
    • 2021-12-09
    • 2019-06-20
    • 1970-01-01
    • 1970-01-01
    • 2016-04-07
    相关资源
    最近更新 更多