C语言函数的递归调用—实现逆序显示输入的字符串名单

#include
#include // 用于strcmp

void DisplayNames(char** cNameArray);

char* cNames[] = { "A", "B", "C", "D", "E", "END" };

int main() {
	DisplayNames(cNames);
	getchar(); // 使用getchar()来暂停
	return 0;
}

void DisplayNames(char** cNameArray) {
	if (strcmp(*cNameArray, "END") == 0) { // 使用strcmp来比较字符串
		return;
	}
	else {
		 
		DisplayNames(cNameArray + 1);
		printf("%s\n", *cNameArray);
	}
}

解释说明

  1. 第一次调用 (cNameArray 指向 “A”):检查是否是 “END”,不是,因此继续。
    进行递归调用 DisplayNames(cNameArray + 1),此时 cNameArray 指向 “B”。
  2. 第二次调用 (cNameArray 指向 “B”):同样的步骤重复。递归调用自己,此时指向 “C”。
  3. 这个过程继续,直到 cNameArray 指向 “END”。
  4. 遇到 “END”:函数返回,不打印任何东西。这是递归调用的最深层。
  5. 回溯:开始回到上一层递归(指向 “E” 的那一层),此时执行 printf(“%s\n”, *cNameArray);,打印 “E”。然后继续回溯到指向 “D” 的层,打印 “D”。这个过程继续,直到最初的调用层(指向 “A”)。

所以,打印的顺序是从最后一个元素到第一个元素,因为每次递归调用发生在打印语句之前。当它到达递归的最深层,并开始回溯时,才开始打印元素,从最后一个元素开始,逐个向上回溯。

你可能感兴趣的:(C&C++,c语言,开发语言)