我正在攻读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
我知道这听起来太笼统了,但是有可能通过首先用迭代函数实现它们来解决如何解决递归练习的问题吗?换句话说,通过首先迭代地发现如何递归求解的模式(如果,诅咒,这是我唯一的选择 - 意思是,我不知道如何递归地解决它。)
答案 0 :(得分:1)
首先迭代地做一些事情可以帮助您了解问题的解决方案。一旦你理解了这一点,那么你可以稍后将它重构为递归函数。如果这有助于你理解一切,那就没关系。了解正在发生的事情是重要的部分,而不是你做的顺序。