30/09/2018, 16:17

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;
}
Trần Hồng Phong viết 18:26 ngày 30/09/2018
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

Nguyễn Minh Dũng viết 18:31 ngày 30/09/2018

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

Đặng Duy viết 18:28 ngày 30/09/2018

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

Đặng Duy viết 18:19 ngày 30/09/2018

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

Đỗ Trung Quân viết 18:20 ngày 30/09/2018

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

BaoLe viết 18:31 ngày 30/09/2018

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);
}
Nguyễn Minh Dũng viết 18:27 ngày 30/09/2018

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);
}
BaoLe viết 18:20 ngày 30/09/2018

Đú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.

Nguyễn Minh Dũng viết 18:25 ngày 30/09/2018

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

phạm đỗ minh quân viết 18:26 ngày 30/09/2018

link droppbox die roi anh oi

Bài liên quan
0