You are on page 1of 8

Tổng hợp các code luyện Giải Thuật Đệ Quy.

1/Đệ qui tuyến tính :

Bài tập 730 :


Tính S(n) = 1 + 2 + 3 + ... + n - 1 + n

Bài tập 731 :


Tính S(n) = 1^2 + 2^2 + 3^2 + ... + (n-1)^2 + n^2

Bài tập 732 :


Tính S(n) = 1 + 1/2 + 1/3 + ... + 1/n

Bài tập 733 :


Tính S(n) = 1/2 + 1/4 + ... + 1/2n

Bài tập 734 :


Tính S(n) = 1 + 1/3 + 1/5 + ... + 1/(2n+1)

Bài tập 735:


Tính S(n) = 1/(1*2) + 1/(2*3) + 1/( n(*n-1) )

Bài tập 736 :


Tính S(n) = 1/2 + 2/3 + 3/4 + ... + n/(n+1)

Bài tập 737 :


Tính S(n) = 1/2 + 3/4 + 5/6 + ... + (2n+1)/(2n+2)

Bài tập 738 :


Tính T(n) = 1*2*3*.....*n

Bài tập 739 :


Tính T(x,n) = x^n

Bài tập 740 :


Tính S(n) = 1 + 1.2 + 1.2.3 + .... + 1.2.3....n

Bài tập 741 :


Tính S(x,n) = x + x^2 + x^3 + ... + x^n

Bài tập 742 :


Tính S(x,n) = x^2 + x^4 +.... + x^2n

Bài tập 743 :


Tính S(x,n) = x + x^3 + x^5 +....+ x^(2n+1)

Bài tập 744 :


Tính S(n) = 1 + 1/(1+2) + 1/(1+2+3) + ... + 1/(1+2+3+...+n)

Bài tập 745 :


Tính S(x,n) = x + (x^2)/2! + (x^3)/3! + ... + (x^n)/n!

Bài tập 746 :


Tính S(x,n) = 1 + (x^2)/2! + (x^4)/4! + ... + (x^2n)/(2n)!

Bài tập 747 :


Tìm ước số lẻ lớn nhất của số nguyên dương n . Ví dụ : n = 100 ước lẻ
lớn nhất của 100 là 25

Bài tập 748 :


Tính S(n) = sqrt(2 + sqrt (2 + ... sqrt ( 2 + sqrt(2) ) ) )

Bài tập 749 :


Tính S(n) = sqrt(n + sqrt (n-1 + sqrt(n-2 + ...sqrt(2 + sqrt (1) ) ) ) )

Bài tập 750 :


Tính S(n) = sqrt(1 + sqrt(2 + sqrt (3 + ...sqrt (n-1 + sqrt (n)))))

Bài tập 751 :


S(n) = 1/(1 + 1/(1 + 1/(1 + 1/(... 1 /(1/(1 + 1/(1 + 1 )))))))

Bài tập 752 :


Hãy đếm số lượng chữ số của số nguyên dương n

Bài tập 753 :


Hãy tính tổng các chữ số của số nguyên dương n

Bài tập 754 :


Hãy tính tích các chữ số của số nguyên dương n

Bài tập 755 :


Hãy đếm số lượng chữ số lẻ của số nguyên dương n

Bài tập 756 :


Hãy tính tổng các chữ số chẵn của số nguyên dương n

Bài tập 757 :


Hãy tính tích các chữ số lẻ của số nguyên dương n
Bài tập 758 :
Cho số nguyên dương n . Hãy tìm chữ số đầu tiên của n

Bài tập 759 :


Hãy tìm chữ số đảo ngược của số nguyên dương n

Bài tập 760 :


Tìm chữ số lớn nhất của số nguyên dương n

Bài tập 761 :


Tìm chữ số nhỏ nhất của số nguyên dương n

Bài tập 762 :


Hãy kiểm tra số nguyên dương n có toàn chữ số lẻ hay không ?

Bài tập 763 :


Hãy kiểm tra số nguyên dương n có toàn chữ số chẵn hay không ?

Làm thêm đệ qui cho mảng 1 chiều, ma trận nhé!


--------Hết đệ qui-------

Một số bài tập về đệ quy!


1/ Sử dụng đệ quy viết chương trình tính tổng các số tự nhiên liên tiếp được mô tả dưới
dạng hàm đệ quy như sau:
Code: Quét chọn
S(n) = S(n-1) + n
2/ Cân đĩa
Cho một cái cân gồm 2 đĩa cân và n quả cân có trong lượng là A[1],A[2],A[3]....A[n] là
những số nguyên. Hãy tìm tất cả các cách đặt một số quả cân lên đĩa bên trái và lên bên
đĩa bên phải sao cho cân thăng bằng.
3/ Đổi tiền lẻ
Cho m loại tiền với giá trị tự nhiên A1,A2,A3......Am và một giá trị tiền n. Viết thuật toán
và chương trình để tính tất cả các cách biểu diễn n thành m loại tiền kể trên.
4/ Tìm đường
Ở một đất nước có n thành phố. Giữa các thành phố có các tuyến đường 1 chiều. Biết:
- Giữa 2 thành phố bất kỳ có thể đi đến nhau (có thể qua nhiều tuyến đường)
- Từ 1 thành phố số các đường đi ra bằng số các đường đi vào.
Lập thuật toán tìm một con đường xuất phát từ một thành phố nào đó, đi qua tất cả các
tuyến đường, mỗi tuyến đường một lần, cuối cùng trở về thành phố ban đầu.
5/ Lập kế hoạch
Có n người và n công việc. Lập trình để sắp xếp mỗi người một công việc sao cho công
sức bỏ ra là ít nhất.
Một người bất kỳ có thể làm được một số việc nào đó, có thể là tất cả các việc. Gọi C i j
là công sức làm việc j của người i, thông tin về khả năng làm việc và công sức làm việc
của mỗi người được thể hiện là một ma trận n x n. Cột thể hiện công việc, hàng thể hiện
người làm việc.
Ai thấy đề mình hay thì thanks cho phát nhá!!!
Tới ngày 20/1 mà không có code thì mình sẽ post lên từng ngày mỗi ngày 1 bài

Hàm tính giai thừa đệ quy nè:


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

long giaithua(int);
long tonggiaithua(int);

int main()
{
int number;
printf("Nhap vao mot so: ");scanf("%d",&number);
printf("%d!=%d\n",number,giaithua(number));
printf("=%d",tonggiaithua(number));

getch();

}
long giaithua(int n)
{
long temp=1;
if(n==0||n==1)
return 1;
else
return n*giaithua(n-1);
return temp;
/*else
{

for(int i=1;i<=n;i++)
temp*=i;
}
return temp;*/
}
long tonggiaithua(int n)//Khai bao kieu long de khoi so
tran bo nho
{
long tong=0;
for(int i=0;i<=n;i++)
{
tong+=long(giaithua(i));//
/*if(i<n)//Doan nay chi la rau ria thoi
printf("%d!+",i);
else
printf("%d!",i);*/
}

return tong;
}

Tính Fibonacci:
#include<stdio.h>
#include<conio.h>

long fibonacci(int);
int main()
{

int n;
printf("Nhap n=");
scanf("%d",&n);
printf("\n%d ",fibonacci(n));
getch();
return 0;
}
long fibonacci(int n)
{
if(n==0||n==1) return 1;//Neu n=0 hoac n=1 thi tra ra
ket qua la 1
return fibonacci(n-1)+fibonacci(n-2);//neu n khac 0 or
khac 1 thi goi de quy
}

CHUONG TRINH NHAP VAO SO NGUYEN N


ROI THEM CAC DAU "+" "-" VAO TRONG CHUOI 123456789 SAO CHO CO
GIA TRI BANG SO NGUYEN N
VD: 78 = -123+45+67+89

#include <stdio.h>
#include <stdlib.h>
#define max 100

int isdigit(char ch) {return '0' <= ch && ch <= '9';}


int isoperator(char ch) {return ch == '+' ? 1: -1;}
int ismultsign(char ch) {return ch == '*';}

long eval(char *str)


{
long val = 0;
char sign = '+';
long temp = 0;
int k = 0;
char *ptr = str;
while (*ptr)
{
if (isdigit(*ptr))
temp = temp*10 + *ptr - '0';
else if(!ismultsign(*ptr))
{
val = val + isoperator(sign)*temp;
temp = 0;
sign = *ptr;
}
ptr ++;
}

return val + isoperator(sign)*temp;


}

char *insert(char *str)


{
char *temp = (char *) malloc(2*max);
char *ptr = str;
int k = 0;
while (*ptr)
{
k+=2;
temp[k-2] = *ptr;
temp[k-1] = '*';
ptr ++;
}
temp[k-1] = 0;
return temp;
}

char *removemultsign(char *str)


{
char *temp = (char *) malloc (max);
char *ptr = temp;
while (*str)
{
if(!ismultsign(*str))
{
*ptr = *str;
ptr++;
}
str++;
}
*ptr = 0;
return temp;
}

void Try(char *str, int k, int sum)


{
if (*(str+k))
for (int j = 0; j < 3; j++)
{
char ch = str[k];
if (j==1) str[k] = '-';
else if (j==2) str[k] = '+';
long num = eval(str);
if (num == sum)
{
char *temp = removemultsign(str);
printf("\n%s = %d\n",temp, sum);
free (temp);
}
Try(str,k+2,sum);
str[k] = ch;
}
}

void main()
{
char str[] = "123456789";
char *ptr = insert(str);
Try(ptr,1,12);
free (ptr);
}

bài tập C của mình là :viết một hàm đệ quy DAONGUOC(int n) in ra các chữ số của n
theo thứ tự đảo ngược
#include <stdio.h>
#include <conio.h>
int mang[1000];
void in();
void daonguoc(int start,int end);
int main(void)
{
int n=0,i=0;
printf("\nNhap do dai cua so :");
scanf("%d",&n);
for(i=0;i<n;i++)
{
mang[i]=10;
while(mang[i]>9)
{
printf("\nNhap chu so thu %d . chi duoc nhap so <= 10 :",i);
scanf("%d",&mang[i]);
}
}
printf("\nBan da nhap day so : ");
in(n);
printf("\nChuoi so sau khi dao la :");
daonguoc(0,n-1);
in(n);
printf("\n");
getch();
return 0;
}
void daonguoc(int start,int end)
{
int tem=0;
if(start<end)
{
tem=mang[start];
mang[start]=mang[end];
mang[end]=tem;
daonguoc(start+1,end-1);
}
}
void in(int n)
{
int i=0;
for(i=0;i<n;i++)
{
printf("%d",mang[i]);
}
}

You might also like