Cho N, K. In dãy: bắt đầu N, trừ K cho đến ≤0, rồi cộng K cho đến về N. Không dùng vòng lặp (for/while), dùng đệ quy.
Ví dụ
Đầu vào - N=12, K=3
Đầu ra - 12 9 6 3 0 3 6 9 12
Phương pháp đệ quy
- Hàm
printSeries(current, N, K, flag) - flag=true: đang giảm, flag=false: đang tăng
- In current
- Nếu current ≤ 0 → đảo flag
- Nếu current == N và flag=false → dừng (đã quay về)
- Đệ quy: current-K (giảm) hoặc current+K (tăng)
Chương trình mẫu
#include <stdio.h>
#include <stdbool.h>
void printSeries(int current, int N, int K, bool flag) {
printf("%d ", current);
if (current <= 0) flag = !flag;
if (current == N && !flag) return;
if (flag)
printSeries(current - K, N, K, flag);
else
printSeries(current + K, N, K, flag);
}
int main() {
int N = 12, K = 4;
printf("Dãy số: ");
printSeries(N, N, K, true);
printf("\n");
return 0;
}
Kết quả
Dãy số: 12 8 4 0 4 8 12
Lưu ý: Đệ quy có thể tràn stack nếu N/K lớn. Cách này chủ yếu để minh họa tư duy đệ quy.