#include <stdio.h>
long fact(int n);
long rfact(int n);
int main(void)
{
int num;
printf("This program calculates factorials.\n");
printf("Enter a value in the range 0-12 (q to quit):\n");
while (scanf("%d", &num) == 1)
{
if (num < 0)
printf("No negative numbers, please.\n");
else if (num > 12)
printf("Keep input under 13.\n");
else
{
printf("loop: %d factorial = %ld\n",
num, fact(num));
printf("recursion: %d factorial = %ld\n",
num, rfact(num));
}
printf("Enter a value in the range 0-12 (q to quit):\n");
}
printf("Bye.\n");
return 0;
}
long fact(int n) // loop-based function
{
long ans;
for (ans = 1; n > 1; n--)
ans *= n;
return ans;
}
long rfact(int n) // recursive version
{
long ans;
if (n > 0)
ans= n * rfact(n-1);
else
ans = 1;
return ans;
}
Code trên dùng để tính giai thừa của một số nguyên,bằng hai cách:sử dụng vòng lặp for và đệ quy.Nhưng mình có 2 điểm thắc mắc.
1.Ở câu lệnh:
while (scanf("%d", &num) == 1)
cụ thể: scanf("%d",&num)==1
,cái này có ý nghĩa như thế nào vậy mọi người?
2. Nguyên nhân nào làm cho code này có thể lặp lại việc tính giai thừa của nhiều số.(mình nói có vẻ khó hiểu,nếu đúng vậy thì cứ chạy thử code các bạn sẽ hiểu ý mình muốn nói).
Thank you mọi người đã đọc topic này.