Tôi có chức năng đệ quy với biến tĩnh "đếm". Số gia tăng hàm đếm đệ quy và vì nó có phạm vi tệp, khi tôi gọi foo() lần thứ hai, số vẫn bằng 5. Có kỹ thuật đặt lại số 0 trước lần thứ hai foo() được gọi không?Chức năng đệ quy với biến tĩnh
Về cơ bản, tôi không muốn đếm có phạm vi tệp nhưng tôi muốn nó giữ lại giá trị của nó thông qua các lần lặp khác nhau.
Một cách tôi có thể nghĩ đến việc thực hiện nó là có một đối số trong foo() để khởi tạo foo(). Chẳng hạn như foo (int count). Nhưng có cách nào khác không?
#include <iostream>
using namespace std;
void foo()
{
static int count = 0;
if(count<5)
{
count++;
cout<<count<<endl;
foo();
}
else
{
cout<<"count > 5"<<endl;
}
}
int main()
{
foo(); //increment count from 0 to 5
foo(); //count is already at 5
return 0;
}
Có lý do cụ thể nào mà bạn đang sử dụng số tĩnh thay vì chuyển nó làm tham số không? Sử dụng các biến tĩnh trong các hàm đệ quy như thế này được coi là một ý tưởng tồi, chính xác vì những thứ như thế này. –
Không có lý do cụ thể cho tĩnh. Từ những câu trả lời dưới đây, tôi sẽ đồng ý rằng một cuộc tranh luận sẽ là cách tốt nhất để giải quyết vấn đề này. – Steve