关于从 n 到 1挨个输出 for 循环 和 递归调用 哪个更优化

关于 for 循环 和 递归调用 哪个更优化

#include <stdio.h>
#include <time.h>
#include <math.h>

/* 计算从 n 到 1 挨个输出的时间 */

clock_t start, stop;

int main() {
	double methodOne(int n);
	double methodTwo(int n);
	double one, two;
	start = clock();
	methodOne(1e5);
	stop = clock();
	one = ((double) (stop - start))/CLK_TCK;
	start = clock();
	methodTwo(1e5);
	stop = clock();
	two = ((double) (stop - start))/CLK_TCK;
	printf("运行时间:%f\n", one);
	printf("运行时间:%f\n", two);
}

void methodOne(int n) {
	for(int i = n; i >= 0; i--) {
		printf("%d\n", i);
	}
	return ;
}

void methodTwo(int n) {
	if(n != 0) {
		printf("%d\n", n);
		methodTwo(n - 1);
	}
}


结果

关于从 n 到 1挨个输出 for 循环 和 递归调用 哪个更优化

显而易见,for 循环 比 递归调用 的时间少;不仅这样,每递归调用一次都得进行分配内存,而 for 循环是每循环一次分配内存的同时会销毁一个内存,这个是由于 i-- 导致的,准确说是由于语言的特性导致的。