Chào mọi người! mọi người cho em hỏi 1 chút ạ, khi đề bài yêu cầu ta phải làm gì đó dùng đệ quy thì trong hàm đệ quy mình có được dùng vòng lặp không ạ?
Đệ quy có được sử dụng vòng lặp?
Được chứ 
Cơ bản thì nếu “hàm gọi lại chính nó” thì được gọi là đệ quy rồi ko liên quan đến vòng lặp 
1 Like
ừ mình cũng nghĩ vậy nhưng mà 1 số chỗ chưa chắc lắm, bạn xem cái code này của mình liệt kê số nguyên tố nhỏ hơn n dùng đệ quy thế này có đc không? cái hàm recursion đó 
#include "stdio.h"
#include "math.h"
void input(int *n) {
scanf("%d", n);
}
void byLoop(int n) {
int i, k;
for(; n >= 2; n--) {
k = 1;
for(i = 2; i <= sqrt(n); i++) {
if(n == 1 || n == 0) {
k = 0;
break;
}
if(n == 2) {
break;
}
if(n % i == 0) {
k = 0;
break;
}
}
if(k == 1) {
printf("%d ", n);
}
}
}
int byRecursion(int n) {
int i, k;
if(n == 2) {
printf("2\n");
}
else {
k = 1;
for(i = 2; i <= sqrt(n); i++) {
if (n % i == 0) {
k = 0;
return byRecursion(n-1);
}
}
if(k == 1) {
printf("%d ", n);
return byRecursion(n-1);
}
}
return 0;
}
int main() {
int n, a;
do {
printf("MOI BAN CHON: \n");
printf("================================\n");
printf("1. Enter a number\n");
printf("2. Print a prime number by loop\n");
printf("3. Print a prime number by recursion\n");
printf("4. Exit\n");
scanf("%d", &a);
switch(a) {
case 1:
printf("Enter a number: ");
input(&n);
break;
case 2:
printf("Print a prime number by loop: \n");
byLoop(n);
break;
case 3:
printf("Print a prime number by recursion: \n");
byRecursion(n);
break;
case 4:
exit(0);
break;
}
}
while(a != 4);
}
Nếu đề bài chỉ nói liệt kê số nguyên tố nhỏ hơn n sử dụng đệ quy, thì theo mình ko cần phải làm dài dòng thế này đâu 
Chỉ cần 1 hàm xác định số nguyên tố rồi in ra thôi 
void TimSoNguyenTo(int n)
{
if( n == 2)
cout << n;
else
{
int flag = 0;
for(int i = n - 1; i > 1; i--)
if(n % i == 0)
flag = 1;
if(flag == 0)
cout << n;
TimSoNguyenTo(n - 1);
}
}
1 Like
Không ý mình là bài yêu cầu dùng đệ quy thì mình làm đệ quy có vòng lặp thế này có được không tại bạn mình cứ bảo trong hàm đệ quy không được có vòng lặp?
Tất nhiên là được rồi bạn 
Đệ quy chỉ là “hàm gọi chính nó”, thế nên bạn cứ yên tâm sài đi 
1 Like
Ok tks bạn 
1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?