Sau đây là mã để giảm số cho sẵn thành một chữ số bằng cách thêm các chữ số của số đệ quy.Tại sao tôi nhận được đầu ra chính xác mặc dù mã không chính xác về mặt logic
Ví dụ: nếu đầu vào là 845
, đầu ra là 8
. 8+4+5 = 17 -> 1+7 = 8
(đầu ra)
#include <stdio.h>
#define TRUE 1
int reduceToSingle(int numb);
int main()
{
int numb;
scanf("%d",&numb);
printf("Original = %d Single digit = %d\n", numb, reduceToSingle(numb));
return TRUE;
}
int reduceToSingle(int numb)
{
int sum = 0, digit = 0;
for (digit = numb % 10; numb != 0; numb = numb/10)
{
digit = numb % 10;
sum += digit;
}
if (sum > 9)
reduceToSingle(sum);
else
return sum;
}
Trong đoạn mã trên trong khối if (sum > 9)
Tôi đã không trả lại giá trị hàm. Tôi chỉ gọi hàm thay vào đó. Về mặt logic, hàm này sẽ cung cấp một giá trị không chính xác. Nhưng khi tôi chạy chương trình trên trong hệ thống của tôi, tôi nhận được tổng số chữ số chính xác trong đầu ra. Tôi không thể hiểu được logic đằng sau hành vi này.
Nếu bạn duyệt qua mã bằng trình gỡ rối, bạn sẽ thấy những gì đang xảy ra. –
Không có logic đằng sau nó. Một chương trình có hành vi không xác định có thể có kết quả * any *, bao gồm cả kết quả bạn mong đợi. –
Trong câu hỏi khác, chỉ 1 trong số 5 câu trả lời là "đúng" [Đầu ra không đúng từ hàm đệ quy để tính tổng các chữ số của một số] (http://stackoverflow.com/questions/7045189/incorrect-output-from- recursive-function-to-compute-sum-of-chữ số-of-a-number) –