01/10/2018, 08:43

Hỏi về hàm đệ quy

sử dụng hàm đệ quy để kiểm tra tính chẵn lẽ của 1 mảng.
Mấy bác giúp em với. thanks

Trần Hoàn viết 10:47 ngày 01/10/2018
  1. Đệ quy tức là gọi hàm A trong hàm A
  2. Tính chẵn lẻ của mảng là gì hả bạn? Mình vừa Google mà không ra
An Hoàng Bình viết 10:45 ngày 01/10/2018

là cho 1 mảng.các phần tử trong mảng phải là các số chẵn, số lẽ liên tiếp nhau. như 1 2 3 2 1
còn nếu như 1 2 3 3 2 thì k phải mảng chẵn lẽ

Trần Hoàn viết 10:44 ngày 01/10/2018

Thường mình chẳng viết hàm đệ quy bao giờ, khó đọc. Về lý thuyết thì viết bằng vòng for còn vừa dễ nghĩ vừa dễ hiểu hơn.

Đây là code C# mình mới viết, bạn đọc hiểu thuật toán rồi chuyển sang C++ nhé:

bool ChẵnLẻ(int[] MảngCầnKiểmTra)
{
    if (MảngCầnKiểmTra.Length < 2)
        return true;
    else
    {
        int[] MảngMấtĐầu = new int[MảngCầnKiểmTra.Length - 1];
        for (int i = 0; i < MảngMấtĐầu.Length; i++)
            MảngMấtĐầu[i] = MảngCầnKiểmTra[i + 1];
        if (MảngMấtĐầu[0] % 2 == MảngCầnKiểmTra[0] % 2)
            return false;
        else
            return ChẵnLẻ(MảngMấtĐầu);
    }
}
An Hoàng Bình viết 10:47 ngày 01/10/2018

thanks bác nhiều…

Hoang viết 10:54 ngày 01/10/2018
boolean dequy(int i){//I >= 1
    if(I < 1) return true;
	if(I == arrays.length() - 1) true;
	if(a[i] – 1 != a[I - 1]  |  a[i] + 1 != a[i+1]) return false;
	dequy(i+1);
}

Bạn tham khảo xem sao

Tao Không Ngu. viết 10:54 ngày 01/10/2018

Không up code lời giải @_@!

Hoang viết 10:51 ngày 01/10/2018

I am so sorry ~ em lỗi đại ka @@!

Phạm Phúc viết 10:53 ngày 01/10/2018

Mọi người có thể giải thích cho em các khái niệm khử đệ quy, quay lui,…( mọi người có thể giới thiệu thêm) được không ạ?

Tao Không Ngu. viết 10:50 ngày 01/10/2018

Khử đệ quy là loại bỏ đệ quy.
Quy lui là quay lại. @_@!

Trần Hoàn viết 10:52 ngày 01/10/2018

Khử đệ quy tức là thấy nó viết dưới dạng đệ quy thì tìm một công thức mới, viết lại dưới dạng không đệ quy. Kiểu như hàm kiểm tra chuỗi chẵn lẻ, mình viết được hàm đệ quy là xuất phát từ ý tưởng thông thường (thường là biến vòng for thành đệ quy)

bool ahjhj(int[] fack)
{
if (fack.length<2 return true;
for (int i=0;i<fack.length-1;i++) if (fack[i]%2==fack[i+1]%2) return false;
return true
}

Còn quay lui, giống như là nhiều vòng for lồng nhau chẳng hạn, tức là chạy hết hàng đơn vị thì tăng hàng chục lên 1 rồi hàng đơn vị về 0, chạy hết hàng chục thì tăng hàng trăm lên 1 rồi đưa chục, đơn vị về 0, đảm bảo duyệt hết các trường hợp

Phạm Phúc viết 10:48 ngày 01/10/2018

Ý em khử là khử như thế nào, quay lui là quay như thế nào đó ạ!

Tao Không Ngu. viết 10:58 ngày 01/10/2018

1 Khử đệ quy thì không có cách làm tổng quát.
Tuy nhiên theo mình thì có thể khử bằng cách dùng công thức tương đượng. dùng vòng lặp. hoặc dùng stack. Một số trường hợp nên khử một số nên để yên.

2 Kỹ thuật quay lui thì có lưu đồ rồ bạn có thể tự tìm.
Đại khái có bước khởi tạo trạng thái. Cập nhật trạng thái. Kiểm tra trạng thái. Khôi phục trạng thái.
Gọi đệ quy,

rogp10 viết 10:46 ngày 01/10/2018

Quay lui chính là đệ quy n-phân (không có suy biến) hiểu được cái đó đã. Khi chạy đệ quy tức là bạn đang duyệt một cây n-phân theo thứ tự nào đó. Tùy vào thứ tự mà bạn hiểu được sơ sơ luồng chạy.

Nếu khử được thành đệ quy đuôi thì tốt vì đệ quy đuôi có thể suy biến dễ dàng.

Phạm Phúc viết 10:59 ngày 01/10/2018

Các anh có thể giải thích cho em cái code Hoán vị bằng lời được không ạ, cách in ra các hoán vị đó ạ

Tao Không Ngu. viết 10:58 ngày 01/10/2018

Bạn dùng 1 biến nguyên để đánh dấu xem đã sinh được hoán vị có bao nhiêu phần tư.
Một mảng trạng thái đánh dấu phần tử đã được chọn hay chưa.

1 Khởi tạo. Số phần tử chọn = 0, và không phần tử nào được chọn.
for { (Mỗi vòng for chọn 1 phần tử.)
2 Chọn 1 phần tử và đánh dấu nó đã chọn cũng như tăng số phần tử đã chọn.
3 Kiểm tra điều kiện kết thúc.
4 Gọi đệ quy.
5 Bỏ trọn phần tử và giảm biến số lượng.
}

Thường bài toán sinh hoán vị hay dùng ánh xạ hơn là gọi đệ quy.

Phạm Phúc viết 10:51 ngày 01/10/2018

anh ơi, em không biết sinh với ánh xạ là gì, chắc anh hướng dẫn em như đứa mới bắt đầu học lập trình được không ạ?

Trần Hoàn viết 10:47 ngày 01/10/2018

Chưa học đại học sao bạn :)) Toán cao cấp trường nào chả dạy, cứ từ từ rồi sẽ biết :v

Một ánh xạ thường gặp trong phổ thông trung học là “hàm số”, trong lập trình là “phương thức”/“hàm”

f(x) = y thì x->y là một ánh xạ
Mà có gì bạn cứ Google thì ra hết mà :))

Phạm Phúc viết 10:50 ngày 01/10/2018

Mai em thi ạ! Em cố suy nghĩ nhưng không sao ra được, mong mọi người cố giúp em đêm nay ạ!

Phạm Phúc viết 10:58 ngày 01/10/2018

Em mới học lớp 9 thôi ạ

Trần Hoàn viết 10:58 ngày 01/10/2018

Ủa, lớp 9 mà thì cái gì đệ quy với quay lui v =))

Bài liên quan
0