要求實現一個遞歸函數,高效求ab(1≤a,b≤62,ab<263)。
函數接口定義:
long long int pow(int a, int b);
其中a
?、b
?是用戶傳入的參數。
裁判測試程序樣例:
#include<iostream>
using namespace std;
long long int pow(int a, int b); //求a^b //輸入整數a,b,求 a^b,處理到文件尾
int main() {
int a,b;
while(cin>>a>>b) {
cout<<pow(a,b)<<endl;
}
return 0;
}
輸入樣例:
2 3
2 10
輸出樣例:
8
1024
分析:
- 首先判斷指數b是否為0,如果是,則返回1,因為任何數的0次方都是1。
- 如果指數b為奇數,則遞歸計算a的b-1次方,然后將結果乘以a。這是因為a的奇數次方可以表示為a乘以a的(b-1)次方。
- 如果指數b為偶數,則遞歸計算a的b/2次方,然后將結果乘以自身。這是因為a的偶數次方可以表示為(a的b/2次方)的平方。
- 最終返回計算得到的結果。
C語言:
#include<iostream>
using namespace std;long long int pow(int a, int b) // 遞歸方式求a^b
{if (b == 0)return 1;if (b % 2 == 1) // 當b為奇數return a * pow(a, b - 1);else { // 當b為偶數long long int c = pow(a, b / 2);return c * c;}
}
總結:
?
這段代碼利用了遞歸的思想,將一個復雜的問題(a的b次方)分解為更小的子問題(a的(b-1)次方或a的b/2次方)。然后逐步遞歸求解子問題,最終得到原問題的解。此外,代碼中還利用了遞歸終止條件(當b為0時),確保遞歸過程能夠終止并返回結果。