bài này làm thủ công không dùng set: var mp = {} for(ele of arr){ if(mp[ele] === undefined){ console.log(ele) mp[ele] = true; } } object trong js cho phép truy cập vào phần tử undefined nên em sử dụng nó như kiểu ctdl hash map luôn
bài toán giai thừa của anh theo em hiểu là điều kiên thoát phải là number > 1 chứ nhỉ, nếu number = 3 thì return là 3 * giaiThua(2), chạy tiếp number = 2 thì return 3 * 2 * giaiThua(1) , giaiThua(1) với điều kiện thoát là number > 1 sẽ return ra 1 nên kết quả là 3 * 2 * 1, còn với điều kiện là number > 0 thì nó là 3 * 2 * 1 * 1.
Cái chỗ anh giải thích phần của giai thừa là return number * giaithua(number -1) rất khó hiểu chổ đó. Anh kêu nó nhân ngược lại nhưng mà anh không chứng minh là có nhân ngược lại như vậy không. Chỗ đó nếu anh dùng Pain vẽ ra cho các bạn chắc các bạn khác xem như em sẽ hiểu. Vì anh chỉ nói cuối cùng nó sẽ lấy thằng 1 nhân ngược lên nên khi nghe sẽ khó hiểu. Nếu anh vẽ ra chắc là sẽ dễ hiểu hơn ! Mong anh vẫn ra thêm các khóa học miễn phí. Cám ơn anh !
á mình hiểu rồi, như ví dụ trên thì nó sẽ chạy đến 6* rồi chờ ở đó, tiếp đến nó gọi tiếp chính nó là tới 5* rồi lại chờ ở đó cứ như vậy nó cứ chồng lên như chồng đĩa vậy rồi đến điểm kết thúc thì lấy kết quả đó nhân ngược lại trở lên giải quyết từng cái đĩa ngược lại cho đến 6* , tức là 1*2, rồi lấy 2*3..... rồi cuối cùng lấy tổng kết quả đó nhân với 6
hi anh ! Trong function ở trên ấy anh. có tool nào hỗ trợ mình xem cách thằng đệ quy lưu trữ giá trị tạm thời sau mỗ lần lặp qua rồi sau đó mới nhân lại với nhau không anh ! #question
var a = 1 ; var b = 10 ; var ar = []; function mangg(x,y) { if(y-x-1>0 ) { x++; ar.push(x) console.log(ar) mangg(x,y)
} return ar } console.log( mangg(a,b)) em chạy trên máy thì oke cho mọi trường hợp mà chạy trên phần bài tập thì không được .. em có sai chổ nào không ạ
function giaiThua(number) { if (number >0)//xác định điểm dừng { return number * giaiThua(number -1); //ở lần lặp đầu tiên, 6 nhân với (6-1) //trong đoạn if, number nhân với giaiThua(number -1) cho đến khi giaiThua(number-1) về giá trị 1 thì dừng //return 6*5(lần 1), 30*4(lần 2), 120*3(lần 3), 720*1(lần 4) } return 1;//number ban đầu =0, return bắt đầu từ giá trị 1 } console.log(giaiThua(6)); *hiểu như này có đúng không các bác =)))))
Để hiểu rõ về điều này thì cần hiểu về cấu trúc dữ liệu Stack bạn ạ. Nó gồm các ngăn theo chiều dọc theo cơ chế FILO (vào trước, ra sau). Trong đệ quy là hàm gọi lại chính nó, mà mỗi hàm được gọi sẽ được push vào Stack, nên Stack sẽ đầy dần lên cho tới khi gặp điều kiện dừng thì hàm được push sau cùng sẽ được pop khỏi Stack; cho tới khi toàn bộ hàm được pop khỏi Stack là hàm hết thúc và trả về kết quả.
@@NamHoang-un1yu Bạn có thể xem logo của Stackoverflow (tràn stack) để hình dung. Khi đệ quy gọi không có điều kiện dừng sẽ dẫn tới stackoverflow - vì kích thước của Stack có giới hạn.
chào anh, em đang gặp vấn đề tạo 1 mega submenu từ 1 mảng Mảng của em có arr = [ {id: 0, parentId: 0} , {id: 1, parentId: 0} , {id: 2 parentId: 1} , {id: 3, parentId: 2}, {id: 4, parentId: 1}, .... ]. Nếu parentId = 0 thì nó là menu cấp 1, nếu object1 có parentid = id của object2 thì object1 đó là menu cấp con của object2. Em đang hướng sử dụng đệ quy ạ :(. html code :
có một sự thật là đệ quy nó ko có một quy chuẩn cụ thể vì mỗi bài toán sẽ có những cách gọi đệ quy khác nhau. cái chúng ta có thể biết là nguyên lý của nó.
return 1 vì 1 là kết quả cuối cùng, và nó lặp lại 1 lần nữa, vì number = 1 nên 1-1 = 0, mà điều kiện là number > 0, vì 0 > 0 xai. không thỏa mãn nên dừng vòng lặp. function giaithua(number) { if(number > 0) { return number * giai thua(number - 1); } return 1; } console.log(giaithua(3));
mình nghĩ như này nè: nó sẽ chạy kiểu: 6*giaithua(5), mà giaithua(5) = 5*giaithua(4),... đến khi giaithua(1)= 1*giaithua(0), thông qua kiểm tra giaithua(0) không thỏa điều kiện nên sẽ trả về 1, kết thúc quá trình
@@hoangnguyen-oj6bw cho mình hỏi khúc return number * giaithua( number -1) khi gọi lại hàm giaithua(number - 1 ) thì nó sẽ gọi lại hàm mà gọi lại hàm nó là nó lại gặp return nhiều lần thì chương trình sẽ xử lí như nào ạ em k hiểu khúc này 22:53
@@h_sangg9459 Return 1 xong thì hàm sẽ chạy ntn nữa vậy bạn? Vì mình nghĩ return 1 xong thì kết thúc hàm và trả về kết quả là 1 chứ nhỉ??? Làm sao để hàm có thể lặp lại 1 lần nữa để cho ra kết quả đúng @@
Anh em làm bài tập tại đây: fullstack.edu.vn/exercises/lesson/246
Trước khi chưa xem video này em rất mơ hồ về Đệ Quy. Xem xong thấy nó thật dễ hiểu. Cảm ơn anh :3
bài này làm thủ công không dùng set:
var mp = {}
for(ele of arr){
if(mp[ele] === undefined){
console.log(ele)
mp[ele] = true;
}
}
object trong js cho phép truy cập vào phần tử undefined nên em sử dụng nó như kiểu ctdl hash map luôn
bài toán giai thừa của anh theo em hiểu là điều kiên thoát phải là number > 1 chứ nhỉ, nếu number = 3 thì return là 3 * giaiThua(2), chạy tiếp number = 2 thì return 3 * 2 * giaiThua(1) , giaiThua(1) với điều kiện thoát là number > 1 sẽ return ra 1 nên kết quả là 3 * 2 * 1, còn với điều kiện là number > 0 thì nó là 3 * 2 * 1 * 1.
Cái chỗ anh giải thích phần của giai thừa là return number * giaithua(number -1) rất khó hiểu chổ đó. Anh kêu nó nhân ngược lại nhưng mà anh không chứng minh là có nhân ngược lại như vậy không. Chỗ đó nếu anh dùng Pain vẽ ra cho các bạn chắc các bạn khác xem như em sẽ hiểu. Vì anh chỉ nói cuối cùng nó sẽ lấy thằng 1 nhân ngược lên nên khi nghe sẽ khó hiểu. Nếu anh vẽ ra chắc là sẽ dễ hiểu hơn ! Mong anh vẫn ra thêm các khóa học miễn phí. Cám ơn anh !
Anh xin lỗi, khoản đệ quy nhiều khi anh cũng lú. Sau anh sẽ rút kinh nghiệm nghe. Cảm ơn em nhiều
Bài giảng tuyệt quá a ơi ^^
Hóng bài này lắm ròi hihi :>
Rất hay, ước gì anh ra khóa giải thuật :v
video rất chi tiết.Like!
videos hay quá anh.
Dễ hiểu quá a ơi
nhanh thật, mới đó mà có nhạc intro rồi ý, đúng là founder F8, hi
video's very good
á mình hiểu rồi, như ví dụ trên thì nó sẽ chạy đến 6* rồi chờ ở đó, tiếp đến nó gọi tiếp chính nó là tới 5* rồi lại chờ ở đó cứ như vậy nó cứ chồng lên như chồng đĩa vậy rồi đến điểm kết thúc thì lấy kết quả đó nhân ngược lại trở lên giải quyết từng cái đĩa ngược lại cho đến 6* , tức là 1*2, rồi lấy 2*3..... rồi cuối cùng lấy tổng kết quả đó nhân với 6
Intro mới xịn quá a ơi :))
Quả intro cực chất lượng anh ei =))))
lượt view cao ghê ý, chúc mừng anh nhé
Chất anh ơi :v
hi anh !
Trong function ở trên ấy anh. có tool nào hỗ trợ mình xem cách thằng đệ quy lưu trữ giá trị tạm thời sau mỗ lần lặp qua rồi sau đó mới nhân lại với nhau không anh !
#question
Đã xem hihi:))
Anh dạy duyên ghê😂
Good job
trời intro xịn :v
Em thấy đệ quy dùng trong duyệt cây nhị phân - binary tree,...AST - abstract syntax tree...sẽ hữu ích, chứng duyệt bằng for loop thì thua :v
Trong Js có thư viện hàng đợi ưu tiên ko ?
var a = 1 ;
var b = 10 ;
var ar = [];
function mangg(x,y)
{
if(y-x-1>0 )
{
x++;
ar.push(x)
console.log(ar)
mangg(x,y)
}
return ar
}
console.log( mangg(a,b))
em chạy trên máy thì oke cho mọi trường hợp mà chạy trên phần bài tập thì không được .. em có sai chổ nào không ạ
anh ơi bao giờ có khóa reactjs vậy ạ
anh ơi cho e hỏi chỗ 19:37 anh đổi tên biến num kiểu gì thế ạ
function giaiThua(number)
{
if (number >0)//xác định điểm dừng
{
return number * giaiThua(number -1);
//ở lần lặp đầu tiên, 6 nhân với (6-1)
//trong đoạn if, number nhân với giaiThua(number -1) cho đến khi giaiThua(number-1) về giá trị 1 thì dừng
//return 6*5(lần 1), 30*4(lần 2), 120*3(lần 3), 720*1(lần 4)
}
return 1;//number ban đầu =0, return bắt đầu từ giá trị 1
}
console.log(giaiThua(6));
*hiểu như này có đúng không các bác =)))))
Đệ quy là em của con rùa.
Hay quá 🤣
chỉ quan tâm intro mới :>
thả ❤
function filterArray (start, unfiltered) {
const filtered = [];
function includes(element, testArray) {
for (const value of testArray) {
if (value === element) {return true}
}
}
function filter(start, unfiltered) {
if (start
Chạy tay bài tháp Hà Nội là ngộ ra ngay
Intro bao quát hết rồi kkk
kiểu như xây bậc thang từ trên xuống, sau đó mình sẽ đi từ dưới lên
Để hiểu rõ về điều này thì cần hiểu về cấu trúc dữ liệu Stack bạn ạ. Nó gồm các ngăn theo chiều dọc theo cơ chế FILO (vào trước, ra sau). Trong đệ quy là hàm gọi lại chính nó, mà mỗi hàm được gọi sẽ được push vào Stack, nên Stack sẽ đầy dần lên cho tới khi gặp điều kiện dừng thì hàm được push sau cùng sẽ được pop khỏi Stack; cho tới khi toàn bộ hàm được pop khỏi Stack là hàm hết thúc và trả về kết quả.
@@F8VNOfficial cảm ơn anh đã nói rõ hơn ^^
@@NamHoang-un1yu Bạn có thể xem logo của Stackoverflow (tràn stack) để hình dung. Khi đệ quy gọi không có điều kiện dừng sẽ dẫn tới stackoverflow - vì kích thước của Stack có giới hạn.
chào anh, em đang gặp vấn đề tạo 1 mega submenu từ 1 mảng
Mảng của em có arr = [ {id: 0, parentId: 0} , {id: 1, parentId: 0} , {id: 2 parentId: 1} , {id: 3, parentId: 2}, {id: 4, parentId: 1}, .... ].
Nếu parentId = 0 thì nó là menu cấp 1, nếu object1 có parentid = id của object2 thì object1 đó là menu cấp con của object2. Em đang hướng sử dụng đệ quy ạ :(.
html code :
(gọi lại hàm)
em xin cảm ơn anh em
ông nào lấy vị dụ 10 hay 100 chắc ngồi suy nghĩ tới mọc râu luôn :v
làm sao để sửa cùng lúc 2 chữ num thành number thế ạ?
Bôi đen một cái trước rồi nhấn ctrl + d nha em
ae lú vd cuối thì cmt mình chỉ cho cực dễ hiểu :v
có một sự thật là đệ quy nó ko có một quy chuẩn cụ thể vì mỗi bài toán sẽ có những cách gọi đệ quy khác nhau. cái chúng ta có thể biết là nguyên lý của nó.
alert('3*2*1 ui giời ơi tính gà lắm, chã biết)
ai như tôi để speed 1.5 để học nhanh hơn ko :))
1.5 học quá đã 😂
Đệ quy khác với callback
Tại sao return 1 vậy mọi người
return 1 vì 1 là kết quả cuối cùng, và nó lặp lại 1 lần nữa,
vì number = 1 nên 1-1 = 0, mà điều kiện là number > 0, vì 0 > 0 xai. không thỏa mãn nên dừng vòng lặp.
function giaithua(number) {
if(number > 0) {
return number * giai thua(number - 1);
}
return 1;
}
console.log(giaithua(3));
@@hoangnguyen-oj6bw thanks
mình nghĩ như này nè:
nó sẽ chạy kiểu: 6*giaithua(5),
mà giaithua(5) = 5*giaithua(4),...
đến khi giaithua(1)= 1*giaithua(0), thông qua kiểm tra giaithua(0) không thỏa điều kiện nên sẽ trả về 1, kết thúc quá trình
@@hoangnguyen-oj6bw cho mình hỏi khúc return number * giaithua( number -1)
khi gọi lại hàm giaithua(number - 1 ) thì nó sẽ gọi lại hàm mà gọi lại hàm nó là nó lại gặp return nhiều lần thì chương trình sẽ xử lí như nào ạ em k hiểu khúc này 22:53
@@h_sangg9459 Return 1 xong thì hàm sẽ chạy ntn nữa vậy bạn? Vì mình nghĩ return 1 xong thì kết thúc hàm và trả về kết quả là 1 chứ nhỉ??? Làm sao để hàm có thể lặp lại 1 lần nữa để cho ra kết quả đúng @@