// 计时 #pragma once #include <iostream> #include <thread> #include <chrono> #include <ctime> // clock namespace DS { // 当n超过一定次数时,栈溢出,比如10万次时:0x005753E9 处有未经处理的异常(在 DS.exe 中): 0xC00000FD: Stack overflow // 实际项目中慎用递归,实际项目中一般会设置最大递归次数,若到达最大递归次数哪怕没求得结果也要返回,防止程序栈破裂,程序终止 void PrintN_Recursive(int n) { // 递归终止条件 if (n <= 1) { return; } //std::cout << n << ' ';// 放在这就会逆序打印 PrintN_Recursive(--n); std::cout << n << std::endl; } void PrintN_Loop(int n) { for (int i = 1; i <= n; ++i) { std::cout << i << std::endl; } } void PrintN_Test() { clock_t start_time = 0, end_time = 0; int n = 0; std::cout << "Input N:"; std::cin >> n; std::cout << "By loop:" << std::endl; start_time = clock();// C语言方式计时 DS::PrintN_Loop(n); end_time = clock(); std::cout << "duration:" << end_time - start_time << "ms" << std::endl; //std::cout << "duration:" << (end_time - start_time) / CLOCKS_PER_SEC << "s" << std::endl; // CLK_TCK或CLOCKS_PER_SEC是每秒走过的时钟打点数 std::this_thread::sleep_for(std::chrono::milliseconds(3000)); std::cout << "By Recursive:" << std::endl; auto start = std::chrono::steady_clock::now(); // C++11 DS::PrintN_Recursive(n);// 当n超过一定次数时,栈溢出,比如1万次时:0x005753E9 处有未经处理的异常(在 DS.exe 中): 0xC00000FD: Stack overflow auto end = std::chrono::steady_clock::now(); auto dura = std::chrono::duration_cast<std::chrono::microseconds>(end - start).count();// 微妙 std::cout << "duration:" << dura * 0.001 << "ms" << std::endl; } }