Ngày mai phòng máy sẽ mở cửa lúc 9:30 và học lúc 10:00.
Các bạn sẽ tiếp tục làm về đệ qui.
#include <iostream>
using namespace std;
#define MAX 10
int n,m;
int A[MAX]; //mang luu loai tien
int result[MAX]; //mang luu ket qua
void print(int* number,int size);
void back(int money, int i);
main()
{
cout<<"So tien: "; cin>>n;
cout<<"So loai tien: "; cin>>m;
for (int i=0; i<m; i++)
{
cout<<"A["<<i<<"] = ";
cin>>A*;
}
back(n,0);
}
void print(int* number,int size)
{
int i;
for (i=0;i<size-1;i++)
printf("%2d x%2d +",A*,number*);
printf("%2d x%2d
",A*,number*);
}
void back(int money, int i)
{
if (money==0)
print(result, m);
else if (i<m)
{
int temp = money/A*;
for (int k=0; k<=temp; k++)
{
result* = k;
back(money - k*A*, i+1);
}
}
}
Chia tiền bằng pp đệ quy & quay lui
code mình dùng pp đệ quy quay lui, sử dụng 1 vòng for
#include <stdio.h>
int x[50], t[50], n, h = 1;
void init()
{
printf("
Nhap n = ");
scanf("%d", &n);
x[0] = 1;
t[0] = 0;
}
void output(int k)
{
printf("
[%d] %d = ", h, n);
for (int i = 1; i < k; i++)
printf(" %d + ", x*);
printf("%d", x[k]);
h++;
}
void Try(int i)
{
for (int j = x[i - 1]; j <= ((n - t[i - 1]) / 2); j++)
{
x* = j;
t* = t[i - 1] + j;
Try(i + 1);
}
x* = n - t[i - 1];
output(i);
}
int main()
{
init();
Try(1);
}
tìm max bằng đệ quy ![]()
int MAX(int *a, int n)
{
if (n == 1)
return *a;
int d = n / 2;
int m1 = MAX(a + d , d);
int m2 = MAX(a, d);
return max(m1, m2); // #define max(a , b) ((a > b) ? a : b)
}
#include <stdio.h>
#include <stdlib.h>
int Max(int* A,int n)
{
if (n==1)
return A[0];
else
{
int temp1, temp2;
temp1 = Max (A,n/2);
temp2 = Max (A+n/2,n-n/2);
return temp1>temp2?temp1:temp2;
}
}
main()
{
int n,i;
scanf("%d",&n);
int A[n];
for (i=0;i<n;i++)
{
A* = rand()%100;
printf("%d ",A*);
}
printf("
Max: %d",Max (A,n));
}
Max - Min
#include <stdio.h>
int max(int a[],int left, int right)
{
int max1,max2;
if (left==right) return a[left];
else
{
max1=max(a,left,(left+right)/2);
max2=max(a,(left+right)/2+1,right);
if(max1>max2) return max1;
else return max2;
}
}
int min(int a[],int left, int right)
{
int min1,min2;
if (left==right) return a[left];
else
{
min1=min(a,left,(left+right)/2);
min2=min(a,(left+right)/2+1,right);
if(min1<min2) return min1;
else return min2;
}
}
int main()
{
int a[1000],n,i;
printf("Nhap n: "); scanf("%d",&n);
for (i=0;i<n;i++)
scanf("%d",&a*);
printf("
Max: %d",max(a,0,n-1));
printf("
Min: %d",min(a,0,n-1));
return 0;
}
Hàm luỹ thừa
int pow(int x, int n)
{
if (!n)
return 1;
else if (n == 1)
return x;
else if (n == 2)
return x * x;
else
{
if (!(n % 2))
{
return pow(pow(x, n / 2), 2);
}
else
return pow(pow(x, n / 2), 2) * x;
}
}
Tính lũy thừa - sử dụng Bitwise & đệ quy
#include <stdio.h>
int power(int num, int n);
void main()
{
printf("%d", power(3, 15));
}
int power(int num, int n)
{
if (n == 1)
{
return num;
}
else
{
int result = 0;
int i = 1;
int t = 0;
while ( i < n ) //find the maximum power of two
{
t = i;
i = i << 1;
}
i = 1;
result = num;
while ( i < t )
{
result = result * result;
i = i << 1;
} //get num^t
i = n - t;
result = result * power(num, i); //Calculate the remaing (n - t)
return result;
}
}