一.递归的练习
1.求阶乘
int f(int n){
if(n==1)return 1;
return n*f(n-1);
}
2.求i到j
int f(int i,int j){
if(i>=j)return j;;
cout<<i<<" ";
return f(i+1,j);
}
3.数组求和
int f(int a[],int begin,int len){
if(begin==(len-1))
return a[begin];
return a[begin]+f(a,begin+1,len);
}
注:1.这个写法确实有点麻烦,但c++没有arry.length(),只能用其他方法求数组长度
2.len放到f里数据就不准确,所以就放在main里面了,下面是所有代码:
#include<iostream>
using namespace std;
int f(int a[],int begin,int len){
if(begin==(len-1))
return a[begin];
return a[begin]+f(a,begin+1,len);
}
int main(){
int a[3]={1,2,3};
int len=sizeof(a)/sizeof(int);
cout<<len<<endl;
cout<<f(a,0,len);
return 0;
}
4.翻转字符串
#include<iostream>
#include<string.h>
using namespace std;
int reverse(string str,int end){
if(end==0)
return str.at(0);
cout<<str.at(end)<<endl;
return str.at(end)+reverse(str,end-1);
}
int main(){
//string str="de234";
//int len=str.length();
//cout<<len<<endl;
cout<<reverse("de234",4);
return 0;
}
我已经被c++,java,字符数组和string绕晕了,整明白了再弄吧
5.斐波那契数列-太常见不写了
6.求解最大公约数
int gcd(int m,int n){
if(n==0){
return m;
}
return gcd(n,m%n);
}
注:关于m==0还是n==0,取余的位置容易等于0,取余的位置到了n那,所以是n==0
7.插入排序 改递归