Chương trình tính x mũ n sử dụng đệ quy?

anh chị có thể phân tính từng bước cho em hiểu hơn về đệ quy không ạ…

#include<stdio.h>
#include<conio.h>

int mu(int a,int b)
{
     if(b==1)
     return a;
     else
     return mu(a,b-1)*a;
}
     
int main()
{
    int n,x;
    printf("nhap so   ");
    scanf("%d",&n);
    printf("so mu   ");
    scanf("%d",&x);
    printf("%d",mu(n,x));
    getch();
    return 0;
}
2 Likes
int mu(int a,int b)
{
     if(b==1) // Điều kiện dừng, mỗi hàm đệ quy điều phải có ĐKD
     return a; // rất quan trọng vì nếu không có sẽ đệ quy mãi mãi
     else
     return mu(a,b-1)*a; // Dòng này mình gọi là công thức đệ quy, tùy vào bài toán mà sẽ phải tìm CT đệ quy khác nhau. Hay nói cách khác đây là dòng tự định nghĩa chính nó. Một hàm f(x) sẽ được định nghĩa dựa trên hàm f(x - 1). Ví dụ như hàm mũ này thì f(n, x) (với x là biến, n làm tham số truyền vào) f(n, x) = f(n, x - 1) * n.
}

Chà chỉ giải thích sơ lược như vậy thì mình nghĩ bạn cũng chưa nắm đâu. Bạn nên đọc phần đệ quy cơ bản này https://www.dropbox.com/s/1cdn2zklxlanh7c/Đệ%20quy%20(cơ%20bản)%20-%20Nguyễn%20Trung%20Thành.pdf?dl=0
Phần này do SV năm 1 viết nên khá phù hợp và dễ hiểu cho người mới làm quen đệ quy. Có gì thắc mắc bạn cứ trao đổi :grin:

2 Likes

@D_ng_Duy đã xem video đệ quy của anh chưa? Anh nghĩ là anh giải thích khá chi tiết

1 Like

chưa anh ạ…em mới đến video 19 thui a hihi

2 Likes

vâng cám ơn anh…em sẽ đọc kĩ hi

2 Likes

Đệ qui là gì? Là dùng chính nó giải quyết nó bằng vòng lặp. Hết :)))).

1 Like

Mới nghĩ ra.Nhờ mọi người kiểm tra zùm.

#include<stdio.h>
#include<conio.h>
long int mu(int co_so,int so_mu,long int luythua=1,int i=0);
int main(){
	int co_so=5,so_mu=5;
	printf("Luy thua cua %d mu %d bang %ld\n",co_so,so_mu,mu(5,5));
	return 0;
}
long int mu(int co_so,int so_mu,long int luythua,int i){
	if(i==so_mu)
		return luythua;
	else
		mu(co_so,so_mu,luythua*co_so,i+1);
}
1 Like

sao em return long int trong khi luythua lại là kiểu int?

long int mu(int co_so,int so_mu,int luythua,int i){
	if(i==so_mu)
		return luythua;
	else
		mu(co_so,so_mu,luythua*co_so,i+1);
}

Đúng rồi hê.Cái này em nhầm rồi, em định để lũy thừalong int để tính được những giá trị lũy thừa lớn hơn thôi.

long int thì thực chất là long, nếu muốn em dùng long long.

1 Like

link droppbox die roi anh oi

Chương trình này thiếu 2 điều kiện nữa là số mũ n bằng 0. Nếu bạn nhập n bằng 0 sẽ báo lỗi ngay vì khi đó đám return ở hàm Mu của bạn sẽ k chạy nữa

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?