Tôi đã được hiển thị một chương trình mẫu để chứng minh đệ quy có vẻ như nó không hoạt động nhưng thực hiện. Logic là khá rõ ràng nhưng tại sao nó hoạt động ngay cả khi các cuộc gọi chức năng đệ quy không được trả lại? Có vẻ như lệnh return
thoát ra khỏi ngăn xếp ngay cả khi nó không được yêu cầu. Đây có phải là một tiêu chuẩn ngôn ngữ hay một điều gcc? Tôi đã thấy nó với C và C++ được biên dịch bằng gcc trên Windows và Linux.Tại sao một cuộc gọi trả lại bị từ chối thoát ra khỏi ngăn xếp mà không có câu lệnh trả về rõ ràng?
#include <iostream>
#include <cstdlib>
using namespace std;
int isprime(int num, int i)
{
if (i == 1) {
return 1;
}
else {
if (num % i == 0)
return 0;
else
isprime(num, i-1); // should be returned
}
}
int main(int argc, char** argv)
{
int input = atoi(argv[1]);
cout << input << "\t" << isprime(input, input/2) << "\n";
}
Hành vi không xác định bao gồm mã đang hoạt động do tai nạn. Các cuộc gọi chức năng lá giá trị trả lại trong sổ đăng ký cpu phải. –
Tôi không thấy lý do bỏ phiếu xuống câu hỏi. Đó là một nghi ngờ khá tốt nhiều người mới bắt đầu có thể có. – varevarao
@varevarao: Người mới bắt đầu "nghi ngờ" hài lòng bởi nỗ lực nghiên cứu. Điều đó nói rằng, tôi upvoted. –