30/09/2018, 17:13

In các số nguyên tố nhỏ hơn N chỉ dùng đệ quy

anh đạt ơi?em đang có một bài tập mà k piết sử lí thuật tuán kiểu j?

Đề là viết hàm Xây dựng chương trình C cho phép nhập vào một số và in ra các số nguyên tố nhỏ hơn số vừa nhập

Điều khó là yêu cầu bài tập là dùng hàm đại quy để sử lí bài toán(k dùng vòng lặp)

huong viết 19:18 ngày 30/09/2018

Bạn viết hai ham đệ quy để tính,
Hàm kt_nt và in_nt
mình viết sơ sơ:

        bool kt_nt(int so,int i = 2) 
{
        if (i == so) return true;
	if (so % i == 0) return false;
	return is_nt(so, i + 1);
}

và ham in

void in_so_nt(int so)
{
	if (so == 1)
	{
		cout << "1 ";
		return;
	}
	if (is_nt(so)) cout << so << " ";
	in_so_nt(so - 1);
}
xyzxxxxxx viết 19:28 ngày 30/09/2018

bạn có thể viết một bài hoàn chỉnh cho mình xem có dk k?

Nguyễn Đức Minh viết 19:28 ngày 30/09/2018

Vãi bạn…bác ấy làm đến mức đó là đã hơi phá nguyên tắc của diễn đàn về hỏi bài tập rồi…có sẵn hàm rồi chỉ việc truyền tham số vào thôi, tự tìm hiểu cho nhớ

xyzxxxxxx viết 19:14 ngày 30/09/2018
#include<conio.h>
#include<stdio.h>
#include<math.h>
int check(int n,int c,int d)
{
    if (c>d)
        return 1;
    if (n%c==0)
    return 0;
    return check(n,c+1,d);
}
int in(int n)
{
    ckeck(n,2,sqrt(d));
}
main()
{
int n,i;
for(i=0;i<30;i++)
printf("%d  = %d",i,in(i));
getch();
}

Các bác thử kiểm tra xem sao nó lại không chay được?

Nguyễn Trí Dân viết 19:28 ngày 30/09/2018

bool kt_nt(int so,int i = 2)
{
if (i == so) return true;
if (so % i == 0) return false;
return is_nt(so, i + 1);
}

is_nt ở dòng thứ 5 có phải là callback của hàm kt_nt phía trên không nhỉ

huong viết 19:26 ngày 30/09/2018

callback là sao bạn. Cái đó chỉ là gọi lại hàm ở trên thôi mà.

BX136 viết 19:27 ngày 30/09/2018
#include <iostream>
#include <conio.h>
#include <windows.h>


int timSoNT(int n){
    if( n == 1 )return 0;
    
    int tong = 0;
    for( int i = 2; i < n; i++) if( n % i == 0){
        tong++;
        break;
    }
    
    if(tong == 0){
        std::cout << n << "\n";
        n--;
        timSoNT(n);
    }else{
        n--;
        timSoNT(n);
    }
}

int main (void){
    int n;
    std::cout << "nhap vao gia tri cua n: " << "\n";
    std::cin >> n;
    system("cls");
    std::cout << "cac so la so nguyen to:\n";
    timSoNT(n);
    _getch();
    return 0;
}

Bài liên quan
0