Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (364.29 KB, 10 trang )
<span class='text_page_counter'>(1)</span><div class='page_container' data-page=1>
nó.
Trong tính tốn, để giải quyết vấn đề sử dụng hàm đệ quy
(hàm gọi chính nó với tham số thay đổi).
Như vậy, hàm đệ quy là hàm gọi lại chính nó.
Với mỗi bước, hàm thay đổi thông tin đầu vào và cho kết
• Giả sử cần tính giai thừa của một số nguyên dương n.
• Giai thừa của n được viết: <b>n!</b>, tích các phần tử từ n đến 1.
• Ví dụ, 5! = (5)(4)(3)(2)(1).
• Có thể thực hiện tính giai thừa bằng vịng lặp thơng thường
để tính tích.
• Một cách tiếp cận khác, sử dụng đệ quy, khi đó cơng thức
tính giai thừa được viết dạng:
thừa nhỏ hơn.
• Như vậy, ta có <b>n! = n * (n – 1)!</b>.
• Ta xử lý <b>(n - 1)!</b> giống như <b>n!</b>, với tham số nhỏ hơn.
• Ta có, <b>(n - 1)! = (n – 1) * (n - 2)!</b>,
• Tương tự, <b>(n - 2)! = (n – 2) * (n - 3)!</b>, quá trình trên kết thúc
• Với cách tiếp cận dạng đệ quy, có thể định nghĩa lại cách
Với bước winding, lời gọi chính nó dừng khi thỏa mãn
điều kiện dừng.
Điều kiện dừng thông thường được định nghĩa là tại
bước đó đã đến bài tốn cơ sở, có thể giải trực tiếp
được.
Với mỗi hàm đệ quy cần có ít nhất một điều kiện
Bước này dừng lại khi q trình đến bài tốn gốc. Q
<b>Bước Winding</b>
F(4) = 4 * F(3)
F(3) = 3 * F(2)
F(2) = 2 * F(1)
F(1) = 1
<b>Bước UnWinding</b>
F(4) = 4 * 6 = 24
F(3) = 3 * 2 = 6
F(2) = 2 * 1 = 2
F(1) = 1
<b>Ví dụ 1: Tính n!.</b>
F(n) = n* F(n-1) nếu n > 1
#include<conio.h>
long factorial(int);
void main()
{
int n;
printf("Nhap vao mot so: ");
scanf("%d",&n);
printf("Gia tri cua giai thua:
%ld",factorial(n));
getch();
}
if((n==0)||(n==1)) return 1;
else return n*factorial(n-1);