2016-03-01 64 views
0

我正在学习C语言考试,今天我在努力实现我用递归告诉的东西,尽管我用迭代函数实现了它,然后我发现我可以很容易地它是递归的。例如:(函数的目的是由右至左的字符betweem 0-9发现,从炭变换他们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 

我知道这听起来太一般了,但有可能得到的是如何通过先用迭代函数实施这些解决递归练习的想法?换句话说,通过迭代地发现如何递归求解的模式(如果是诅咒,这是我唯一的选择 - 意思是说,我不知道如何递归求解)。

+0

想到递归,就像使用堆栈数据结构迭代操作一样。 –

+1

“如何通过首次使用迭代函数来实现递归练习来解决递归练习” - 不太清楚这意味着什么,想要详细阐述? – Ian

+0

@Ian我首先写了第一个函数,然后突然看到递归函数遵循相同的逻辑。 –

回答

1

首先做一些迭代的事情很好,可以帮助您了解问题的解决方案。一旦你明白了,那么你可以在稍后将它重构为递归函数。如果这有助于你理解一切,那就很好。理解正在发生的事情是重要的部分,而不是你以什么顺序执行它。