【发布时间】:2019-04-22 17:21:43
【问题描述】:
任务是编写一个递归函数,它返回 char 数组中的最后一个数字 (ASCII)。如果给定数组中没有数字,则应返回 0。
编辑
在这种情况下,函数应该只从数组 a 返回“4”,因为它是该数组中的最后位,而在数组 b 中它应该返回“0”,因为没有数字完全在那个数组中。
char rek(char a[], int i){
int j = i;
char tmp = '0';
if((a[j] >= '0') && (a[j] <= '9')){
tmp = a[j];
}
while(a[j] != '\0'){
rek(a, i+1);
}
return tmp;
}
int main(){
char a[7] = {'a','b','1','c','4','n','\0'};
char b[7] = {'a','b','c','c','a','n','\0'};
printf("Letzte Ziffer: %c \n", rek(a, 0));
printf("Letzte Ziffer: %c", rek(b, 0));
getchar();
return 0;
}
我知道每次递归调用我的函数时,tmp 都会设置为“0”,这不是我想要的。
不知何故,我不知道该函数如何在不丢失设置的 tmp 值的情况下使用数组中的下一个元素调用自身。
我也不想让 tmp 成为全局变量。
此外,出乎我意料的是,它在 bot 行中输出“c”作为结果。 我认为我的 if 语句应该防止这种情况发生。
【问题讨论】:
-
"...返回最后一个数字..." - “最后一个数字”是指最后一个 数字字符 ??相关:如果您应该是微不足道的递归函数有一个硬循环(while/for),那可能是错误的。想想 recursion 是如何循环的;不是函数的非递归部分。
-
我编辑了这个问题,因为我问得不好。