1.遞歸求前n項和
所有循環(huán)都可以轉(zhuǎn)化為遞歸,而遞歸大多數(shù)可以轉(zhuǎn)換為循環(huán)
#include <iostream>
using namespace std;
int sum(int a[],int n)
{
if(n==0)
return a[0];
else
return sum(a,n-1) + a[n];
}
int main()
{
int a[] = {1,2,3,4,5};
cout<<sum(a,4);
return 0;
}
2.遞歸求最大值
數(shù)組第一個下標(biāo)與最后一個下標(biāo)相同時,也就是只有一個元素時,是遞歸的出口
if(left == right)
return a[left];
否則就將第一個元素與后面所有元素的最大值相比較
else{
int m = a[left];
int n = findMax(a,left+1,right);
if(m>n)
return m;
else
return n;
}
完整代碼
#include <iostream>
using namespace std;
int findMax(int a[],int left,int right)
{
if(left == right)
return a[left];
else{
int m = a[left];
int n = findMax(a,left+1,right);
if(m>n)
return m;
else
return n;
}
}
int main()
{
int a[5] = {5,22,8,3,1};
cout<<findMax(a,0,4);
return 0;
}
3.遞歸求和
思路和求最大值相似
int sum(int arr[],int left,int right)
{
if(left == right)
return arr[left];
else
{
return arr[left] + sum(arr,left+1,right);
}
}
4.遞歸冒泡
int bubble(int arr[],int left,int right)
{
if(left == right)
return 0;
else
{
for(int i=left;i<=right-1;i++)
{
if(arr[i]>arr[i+1])
{
int tmp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = tmp;
}
}
bubble(arr,left,right-1);
}
}
5.遞歸求最大公約數(shù)
int gcd(int a,int b)
{
int r = a % b;
if(r == 0)
return b;
else{
return gcd(b,r);
}
}