簡體   English   中英

一定時間后停止程序(包含遞歸函數)

[英]Stop program(containing recursive function) after certain time

假設我想在 x 秒后關閉程序(不是#define)

我的程序正在運行一個遞歸函數(遞歸樹)

無論遞歸深度如何,我該怎么做才能使程序的運行時間在任何地方都可用,我的第一個想法是使用指針作為函數參數,但我很快就感到困惑了。

謝謝你的幫助。

只需將開始時間存儲在一個全局變量中,然后在遞歸函數中找到當前時間和那個時間之間的差異。

#include <time.h>

static time_t start_time;

static void f(void) {
   // ...
   time_t current_time = time(NULL);
   int diff = current_time - start_time;
   // ...
}

int main(void) {
   start_time = time(NULL);
   f();
   return 0;
}

您可以將開始時間作為參數傳遞,但沒有必要將相同的值傳遞給每個遞歸調用。 它只會白白占用你可用的堆棧空間。

這個問題有兩個主要解決方案,第一個是擁有一個全局或類/結構數據成員,您可以隨時在此函數中訪問它。

第二個是向你的函數添加一個額外的參數,然后遞歸地重新傳遞它,在這種情況下你想通過引用來避免每次傳遞時都進行復制。

我能想到的最終解決方案是,如果你的語言支持函數內的靜態變量,那么當你第一次調用函數時,你檢查這個靜態變量是否為空,如果是則初始化。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM