最近寫算法作業發現自己還不是很明白遞歸算法的套路,因此在此記錄一下基本方法:
在寫之前,確認兩點:
1.遞推表達式
2.邊界條件
然後根據不同取值情況利用if-else判斷語句進行遞歸,遞歸體現在return語句本身就嵌套了要遞歸的函數。
代碼示例:
#include<iostream>
using namespace std;
int sequence(int n);
int sequence_sum(int n);
int main(){
int n;
cin>>n;
cout<<"第"<<n<<"項爲:"<<sequence(n)<<endl;
cout<<"前"<<n<<"項和爲:"<<sequence_sum(n)<<endl;
return 0;
}
int sequence(int n){
//返回具體值
if(n==1){
return 1;
}
//遞歸式
else if(n%2==0){
return 1+sequence(n/2);
}
else{
return sequence((n-1)/2)+sequence((n-1)/2+1);
}
}
int sequence_sum(int n){
long long sum=0;
for(int i=n;i>=1;i--){
sum+=sequence(i);
}
return sum;
}