在C++中,遞歸函數可以通過以下方法進行錯誤處理:
try
、catch
和throw
關鍵字來捕獲和處理異常。在遞歸函數中,當遇到錯誤時,可以拋出一個異常并在調用棧中向上拋出,直到被捕獲為止。#include <iostream>
#include <stdexcept>
int factorial(int n) {
if (n < 0) {
throw std::invalid_argument("Invalid input: n must be non-negative.");
}
if (n == 0 || n == 1) {
return 1;
}
return n * factorial(n - 1);
}
int main() {
try {
int result = factorial(-1);
std::cout << "Result: " << result << std::endl;
} catch (const std::invalid_argument& e) {
std::cerr << "Error: " << e.what() << std::endl;
}
return 0;
}
#include <iostream>
enum class ErrorCode {
SUCCESS,
INVALID_INPUT
};
ErrorCode factorial(int n, int& result) {
if (n < 0) {
return ErrorCode::INVALID_INPUT;
}
if (n == 0 || n == 1) {
result = 1;
return ErrorCode::SUCCESS;
}
result = n * factorial(n - 1, result);
return ErrorCode::SUCCESS;
}
int main() {
int result;
ErrorCode errorCode = factorial(-1, result);
if (errorCode != ErrorCode::SUCCESS) {
std::cerr << "Error: Invalid input." << std::endl;
} else {
std::cout << "Result: " << result << std::endl;
}
return 0;
}
assert
宏來檢查程序的假設和不變式。如果假設不成立,程序將終止并顯示錯誤消息。這種方法適用于調試階段,但在發布版本中可能會被禁用。#include <iostream>
#include <cassert>
int factorial(int n) {
assert(n >= 0 && "Invalid input: n must be non-negative.");
if (n == 0 || n == 1) {
return 1;
}
return n * factorial(n - 1);
}
int main() {
int result = factorial(-1); // This will cause the program to terminate with an error message
std::cout << "Result: " << result << std::endl;
return 0;
}
請注意,異常處理和錯誤碼方法更適用于復雜的遞歸函數,而斷言方法更適用于簡單的調試場景。在實際項目中,應根據具體需求選擇合適的錯誤處理方法。