VietTuts

Tự Học Lập Trình Online

  • Home
  • Java
  • Servlet
  • JSP
  • Struts2
  • Hibernate
  • Spring
  • MyBatis
  • Java WS
  • C
  • C++
  • C#
  • Python
  • PHP
  • Excel
  • VBA
  • Web
    • JavaScript
    • JQUERY
    • JSON
    • AJAX
    • CSS
    • HTML
    • HTML5
    • Node.js
    • Angular 7
  • SQL
    • MySQL
    • SQL Server
  • Misc
    • Eclipse
    • Phần mềm tiện ích
    • Cấu trúc DL&GT
    • Selenium Test
C Cơ Bản Chuỗi (String) Trong C Xử Lý File Trong C

Bài Tập C

Danh sách bài tập C Danh sách bài tập C++

Bài Tập C Kinh Điển

Dãy số Fibonacci trong C Check số nguyên tố trong C Tính giai thừa trong C Chuyển đổi hệ cơ số trong C

Bài Tập C Cơ Bản

Giải phương trình bậc 2 Tìm UCLN và BCNN Liệt kê tất cả số nguyên tố nhỏ hơn n Liệt kê n số nguyên tố đầu tiên Liệt kê tất cả số nguyên tố có 5 chữ số Phân tích số nguyên Tính tổng của các chữ số của một số nguyên Tìm số thuận nghịch Liệt kê số Fibonacci nhỏ hơn n là nguyên tố

Bài Tập Vòng Lặp C

Bài tập vòng lặp trong C Vẽ tam giác đều trong C Vẽ tam giác vuông cân trong C Vẽ tam giác Floyd trong C Vẽ tam giác Pascal trong C

Bài Tập Mảng Trong C

In mảng trong C Nhập mảng từ bàn phím trong C Tính tổng giá trị của một mảng trong C Tính giá trị trung bình của một mảng trong C Sao chép mảng trong C Chia một mảng thành hai mảng trong C Trộn hai mảng thành một mảng trong C

Bài Tập Mảng 2 Chiều Trong C

Nhập ma trận từ bàn phím trong C Trừ hai ma trận trong C Cộng hai ma trận trong C Tính tổng tất cả các phần tử của ma trận trong C

Bài tập chuỗi trong C

Nhập chuỗi từ bàn phím trong C Bài tập C - In chuỗi trong C Tìm độ dài chuỗi trong C Tìm số lần xuất hiện của một ký tự trong một chuỗi trong C Sắp xếp các ký tự của chuỗi theo thứ tự bảng chữ cái trong C Sao chép chuỗi trong C Đảo ngược chuỗi trong C Tìm kiếm chuỗi trong C So sánh hai chuỗi trong C Nối chuỗi trong C Đảo ngược các ký tự của từng từ của một chuỗi trong C Đảo ngược thứ tự từ của một chuỗi trong C Sắp xếp các chuỗi theo thứ tự chữ cái trong C Chuyển đổi chuỗi thành số nguyên trong C Biến đổi chuỗi thành chữ hoa trong C Biến đổi chuỗi thành chữ thường trong C

Bài tập về các thuật toán sắp xếp trong C

Sắp xếp nổi bọt (Bubble Sort) trong C Sắp xếp chọn (Selection Sort) trong C Sắp xếp chèn (Insertion Sort) trong C Sắp xếp nhanh (Quick Sort) trong C Sắp xếp trộn (Merge Sort) trong C Sắp xếp Shell Sort trong C

Bài Tập C Nâng Cao

Bài tập quản lý sinh viên trong C/C++
1 / 3
❮ ❯

Tổng hợp một số bài tập về Đệ quy trong C


Bài tập C - Biến đổi chuỗi thành chữ thường trong C
Bài tập C - Cộng hai số bởi sử dụng con trỏ trong C

Nội dung chính

  • Đệ quy là gì?
  • Bài tập Đệ quy trong C
  • Tính dãy số Fibonacci sử dụng đệ quy
  • Tính giai thừa sử dụng đệ quy
  • Tìm USCLN và BSCNN của 2 số a và b sử dụng đệ quy
  • Tính tổng n số sử dụng đệ quy
  • Bài toán Tháp Hà Nội (Tower of Hanoi) sử dụng đệ quy
    • Tháp Hà Nội (Tower of Hanoi) là gì ?
    • Qui tắc trò chơi toán học Tháp Hà Nội (Tower of Hanoi)
    • Chương trình C: sử dụng đệ quy

Đệ quy là gì?

Đệ quy trong C là quá trình trong đó một phương thức gọi lại chính nó một cách liên tiếp. Một phương thức trong C gọi lại chính nó được gọi là phương thức đệ quy.

Cú pháp:


kieu_tra_ve tenhamdequi() {
   // your code
   tenhamdequi(); /* goi lai chinh no */
}

int main() {
   tenhamdequi();
} 

Ngôn ngữ lập trình C hỗ trợ đệ quy, ví dụ, một hàm có thể gọi đến chính nó. Nhưng khi bạn sử dụng hàm đệ quy, lập trình viên cần phải cẩn thận định nghĩa điều kiện thoát khỏi hàm, phòng khi gặp phải vòng lặp vô hạn.

Hàm đệ quy rất hữu dụng để giải quyết các vấn đề trong toán học như tính toán giai thừa, tạo dãy Fibonacci, …


Bài tập Đệ quy trong C

Dưới đây là các bài tập C giúp bạn hiểu kiến thức cơ bản về Đệ quy trong C:


Tính dãy số Fibonacci sử dụng đệ quy

Ví dụ chương trình C tìm 10 số Fibonacci đầu tiên sử dụng phương pháp đệ quy:


/**
 * Tinh day so Fibonacci bang phuong phap de quy
 *  
 * @author viettuts.vn
 */
#include<stdio.h>
 
/**
 * Tinh so Fibonacci thu n
 * 
 * @param n: chi so cua so Fibonacci tinh tu 0 
 *           vd: F0 = 0, F1 = 1, F2 = 1, F3 = 2
 * @return So Fibonacci thu n
 */
int fibonacci(int n) {
    if (n < 0) {
        return -1;
    } else if (n == 0 || n == 1) {
        return n;
    } else {
        return fibonacci(n - 1) + fibonacci(n - 2);
    }
}
 
/**
 * Ham main
 */
int main() {
 int i;
    printf("10 so dau tien cua day so Fibonacci: \n");
        for (i = 0; i < 10; i++) {
        printf("%d ", fibonacci(i));
    }
}

Chạy chương trình C trên cho kết quả như sau:

Bài tập về Đệ quy trong C

Tính giai thừa sử dụng đệ quy

Ví dụ chương trình tính giai thừa trong C có sử dụng phương pháp đệ quy:


/**
 * Tinh giai thua su dung phuong phap de quy
 *  
 * @author viettuts.vn
 */
 
#include<stdio.h>
 
/**
 * tinh giai thua
 * 
 * @author viettuts.vn
 * @param n: so nguyen duong
 * @return giai thua cua so n
 */
long tinhGiaithua(int n) {
    if (n > 0) {
        return n * tinhGiaithua(n - 1);
    } else {
        return 1;
    }
}
 
/**
 * Ham main
 */
int main() {
    int a = 5;
    int b = 0;
    int c = 10;
    printf("Giai thua cua %d  la: %d \n",  a, tinhGiaithua(a));
    printf("Giai thua cua %d  la: %d \n",  b, tinhGiaithua(b));
    printf("Giai thua cua %d  la: %d",  c, tinhGiaithua(c));
}

Chạy chương trình C trên cho kết quả như sau:

Bài tập về Đệ quy trong C

Tìm USCLN và BSCNN của 2 số a và b sử dụng đệ quy

Ví dụ dưới đây sử dụng giải thuật Euclid để giải quyết bài toán tìm ước số chung lớn nhất (USCLN) và bội số chung nhỏ nhất (BSCNN) của hai số nguyên dương a và b:


/**
 * Chuong trinh tim uoc chung lon nhat (USCLN)
 * va boi so chung nho nhat (BSCNN) cua 2 so a và b
 * 
 * @author viettuts.vn
 */
#include<stdio.h>
 
/**
 * Tim uoc so chung lon nhat (USCLN)
 */
int USCLN(int a, int b) {
    if (b == 0) return a;
    return USCLN(b, a % b);
}
 
/**
 * Tim boi so chung nho nhat (BSCNN)
 */
int BSCNN(int a, int b) {
    return (a * b) / USCLN(a, b);
}
 
/**
 * Ham main
 */
int main() {
 int a, b;
    printf("Nhap so nguyen duong a = ");
    scanf("%d", &a);
    printf("Nhap so nguyen duong b = ");
    scanf("%d", &b);
    // tinh USCLN cua a và b
    printf("\nUSCLN cua %d va %d la: %d", a, b, USCLN(a, b));
    // tinh BSCNN cua a và b
    printf("\nUSCLN cua %d va %d la: %d", a, b, BSCNN(a, b));
}

Chạy chương trình C trên cho kết quả như sau:

Bài tập về Đệ quy trong C

Tính tổng n số sử dụng đệ quy

Ví dụ chương trình tổng của n số trong C có sử dụng phương pháp đệ quy:


/**
 * Chuong trinh tong cua n so tu nhien
 * 
 * @author viettuts.vn
 */
#include<stdio.h>

int calculateSum(int);

int main() {
   int i, num;
   int result;

   printf("Nhap mot so bat ky: ");
   scanf("%d", &num);

   result = calculateSum(num);
   printf("\nTong cac so tu 1 toi %d la: %d", num, result);

   return (0);
}

int calculateSum(int num) {
   int res;
   if (num == 1) {
      return (1);
   } else {
      res = num + calculateSum(num - 1);
   }
   return (res);
}

Chạy chương trình C trên cho kết quả như sau:

Bài tập về Đệ quy trong C

Bài toán Tháp Hà Nội (Tower of Hanoi) sử dụng đệ quy

Trước khi tìm hiểu lời giải cho bài toán Tháp Hà Nội (Tower of Hanoi), mình xin nhắc lại một số qui tắc của trò chơi toán Tháp Hà Nội này:


Tháp Hà Nội (Tower of Hanoi) là gì ?

Bài toán Tháp Hà Nội (Tower of Hanoi) là một trò chơi toán học bao gồm 3 cột và với số đĩa nhiều hơn 1.

Dưới đây là hình minh họa bài toán Tháp Hà Nội (Tower of Hanoi) với trường hợp có 3 đĩa.

Bài tập về Đệ quy trong C

Các đĩa có kích cỡ khác nhau và xếp theo tự tự tăng dần về kích cỡ từ trên xuống: đĩa nhỏ hơn ở trên đĩa lớn hơn. Với số đĩa khác nhau thì ta có các bài toán Tháp Hà Nội (Tower of Hanoi) khác nhau, tuy nhiên lời giải cho các bài toán này là tương tự nhau. Lời giải tối ưu cho bài toán Tháp Hà Nội (Tower of Hanoi) là khi trò chơi chỉ có 3 cọc. Với số cọc lớn hơn thì lời giải bài toán vẫn chưa được khẳng định.


Qui tắc trò chơi toán học Tháp Hà Nội (Tower of Hanoi)

Nhiệm vụ của trò chơi là di chuyển các đĩa có kích cỡ khác nhau sang cột khác sao cho vẫn đảm bảo thứ tự ban đầu của các đĩa: đĩa nhỏ nằm trên đĩa lớn. Dưới đây là một số qui tắc cho trò chơi toán học Tháp Hà Nội (Tower of Hanoi):

  • Mỗi lần chỉ có thể di chuyển một đĩa từ cột này sang cột khác.
  • Chỉ được di chuyển đĩa nằm trên cùng (không được di chuyển các đĩa nằm giữa).
  • Đĩa có kích thước lớn hơn không thể được đặt trên đĩa có kích thước nhỏ hơn.

Dưới đây là hình minh họa cách giải bài toán Tháp Hà Nội (Tower of Hanoi) với trường hợp có 3 đĩa.

Bài tập về Đệ quy trong C

Bài toán Tháp Hà Nội (Tower of Hanoi) với số đĩa là n có thể được giải với số bước tối thiểu là 2n−1. Do đó, với trường hợp 3 đĩa, bài toán Tháp Hà Nội (Tower of Hanoi) có thể được giải sau 23−1 = 7 bước.


Chương trình C: sử dụng đệ quy

Dưới đây là chương trình C để giải bài toán Tháp Hà Nội (Tower of Hanoi) sử dụng đệ quy trong C trong C:


/**
 * Chuong trinh giai bai toan Thap Ha Noi
 * 
 * @author viettuts.vn
 */

#include<stdio.h>

void TOH(int num, char x, char y, char z);

int main() {
   int num;
   printf("\nNhap so dia: ");
   scanf("%d", &num);

   TOH(num - 1, 'A', 'B', 'C');
   return (0);
}

void TOH(int num, char x, char y, char z) {
   if (num > 0) {
      TOH(num - 1, x, z, y);
      printf("\n%c -> %c", x, y);
      TOH(num - 1, z, y, x);
   }
}

Chạy chương trình C trên cho kết quả như sau:

Bài tập về Đệ quy trong C
Bài tập C - Biến đổi chuỗi thành chữ thường trong C
Bài tập C - Cộng hai số bởi sử dụng con trỏ trong C

Recent Updates

Xuất dữ liệu ra màn hình console trong JavaCài đặt môi trường JavaLinkedList trong javaArrayList trong javaXử lý duplicate trong SQLPhím tắt hay dùng trong ExcelBảo mật tập tin ExcelDịch trang tính trong ExcelIn trang tính trong ExcelHàm VLOOKUP trong ExcelĐối tượng đồ họa trong ExcelSử dụng macro trong ExcelSắp Tết 2026 Rồi! - Còn bao nhiêu ngày nữa là đến tết 2026?

VietTuts on facebook

Học Lập Trình Online Miễn Phí - VietTuts.Vn
Danh Sách Bài Học

Học Java | Hibernate | Spring
Học Excel | Excel VBA
Học Servlet | JSP | Struts2
Học C | C++ | C#
Học Python
Học SQL

Bài Tập Có Lời Giải

Bài tập Java
Bài tập C
Bài tập C++
Bài tập C#
Bài tập Python
Ví dụ Excel VBA

Câu Hỏi Phỏng Vấn

201 câu hỏi phỏng vấn java
25 câu hỏi phỏng vấn servlet
75 câu hỏi phỏng vấn jsp
52 câu hỏi phỏng vấn Hibernate
70 câu hỏi phỏng vấn Spring
57 câu hỏi phỏng vấn SQL

Scroll back to top

Copyright © 2016 VietTuts.Vn all rights reserved. | Liên hệ | Chính sách - riêng tư | sitemap.html | sitemap_index.xml