递归算法应该包括两种情况:递归情况和基底情况。递归情况演变到最后必须答到一个基底,否则出错。
典型的递归问题
(1)、求阶乘
#include<iostream>
using namespace std;
int find (int n){
if(n == 1){
return 1;
}
return find(n-1)*n;
}
int main(){
int n ;
cin>>n;
int t = find(n);
cout<<t;
}
(2)斐波拉契数列的通项
#include<iostream>
using namespace std;
int find (int n){
if(n == 1|| n ==2){
return 1;
}
return find(n-1)+find(n-2);
}
int main(){
int n ;
cin>>n;
int t = find(n);
cout<<t;
}
典型的循环问题
(1)筛法求素数
#include<iostream>
using namespace std;
int main(){
int a[101],i,j;
for(i=1;i<101;i++){
a[i] = 1;
}
for(i=2;i<101;i++){
if(a[i]!=0){
for(j=i+i;j<101;j = j+i){
if(a[j]==0) continue;
if(j%i==0){
a[j] = 0;
}
}
}
}
for(i=2;i<101;i++){
if(a[i]!=0){
cout<<i<<" ";
}
}
return 0;
}
开根号方法求素数
#include<iostream>
#include<cmath>
using namespace std;
int main(){
int i,j ,a[101];
for(i=2;i<101;i++){
for(j=2;j<=sqrt(i);j++){
if(i%j==0){
break;
}
}
if(j>sqrt(i)){
cout<<i<<" ";
}
}
}