Tin học Đệ quy quay lui (thắc mắc)

Code11

Học sinh
Thành viên
7 Tháng mười 2018
48
19
21
Quảng Nam
THPT Trần Cao Vân
[TẶNG BẠN] TRỌN BỘ Bí kíp học tốt 08 môn
Chắc suất Đại học top - Giữ chỗ ngay!!

ĐĂNG BÀI NGAY để cùng trao đổi với các thành viên siêu nhiệt tình & dễ thương trên diễn đàn.

Mọi người cho em hỏi điểm dừng của ct con này nằm ở đâu vậy,em cứ nghĩ là nếu nó gọi nó ra mãi nv thì sao mà có điểm dừng được ạ,em cảm ơn.

function gt(x:integer):longint;
begin
if x = 0 then
gt:=1
else
gt:=x*gt(x-1);
end;
 

Trâm Nguyễn Thị Ngọc

Giải Nhất event Thế giới Sinh học 2
Thành viên
13 Tháng mười 2018
1,523
1,339
216
18
Quảng Trị
Trường TH&THCS Hải Ba
Đến khi nào x=0 thì nó sẽ thoát đó anh,e nghĩ là vậy.

E nghĩ là nó chạy như này
VD :x=4 thì nó sẽ làm vế ngược lại là gt:=4*gt(4-1)
=> gt:=4*gt(3); Lúc này nó gọi trong này gt(3) nên hàm sẽ tiếp tục tính gt(3)
=> gt(3)=3*gt(2)
=> rồi tiếp đến kết thúc là x=0
 
Last edited by a moderator:
  • Like
Reactions: Code11

Vuio Vuio

Học sinh
Thành viên
11 Tháng một 2019
10
7
21
22
Đồng Nai
THPT Vĩnh Cửu
Mọi người cho em hỏi điểm dừng của ct con này nằm ở đâu vậy,em cứ nghĩ là nếu nó gọi nó ra mãi nv thì sao mà có điểm dừng được ạ,em cảm ơn.

function gt(x:integer):longint;
begin
if x = 0 then
gt:=1
else
gt:=x*gt(x-1);
end;
Điểm dừng là tại x = 0 nhé.
Trong đệ quy thì điểm dừng là điều kiện mà câu lệnh thực hiện không gọi tới chính nó.
Ở code của bạn thì điểm dừng x = 0 vì khi x = 0 thì không gọi đến gt (không gọi lại chính nó) mà chỉ gán gt := 1 thôi.
 
Top Bottom