霍納規則
霍納規則是一種使用最少數目的乘法在點x0處計算多項式的方法。如果一個多項式爲A(x)=anxn+an-1xn-1+……+a1x+a0,則霍納規則爲:
A(x0)=(…(anx0+an-1)x0+…+a1)x0+a0
由公式可以看出括號內的部分即爲遞歸的過程,最後遞歸的出口應爲a0
#include <iostream>
using namespace std;
int Horner(int *a,int i,int x,int n)
{
if(i==n-1)
return a[i];
else
{
return x*Horner(a,i+1,x,n)+a[i];
}
}
int main()
{
int a[]={1,2,3};
cout << Horner(a,0,2,3)<<endl;
return 0;
}
所有布爾值的組合
思路:將先申請n個布爾類型的內存地址,然後令第一個爲Ture,開始遞歸,然後令第一個數爲false,再遞歸,當到最後一個時,先設爲true,輸出,再設爲false輸出。
#include <iostream>
using namespace std;
void Printf(bool *a,int n)
{
for(int i=0; i<n; i++)
{
if(a[i]) cout << "true" << " ";
else cout << "false" << " ";
}
cout << endl;
}
void AllBool(bool *a,int k,int n)
{
if(k==n-1)
{
a[k]=true;
Printf(a,n);
a[k]=false;
Printf(a,n);
}
else
{
a[k]=true;
AllBool(a,k+1,n);
a[k]=false;
AllBool(a,k+1,n);
}
}
int main()
{
int n;
bool *a;
n=2;
a=new bool(n);
AllBool(a,0,n);
return 0;
}
階乘
#include <iostream>
using namespace std;
int Iterative(int n)
{
int result = 1;
for(int i=1;i<=n;i++)
{
result*=i;
}
return result;
}
int Recursive(int n)
{
if(n==1)
return n;
else
return n*Iterative(n-1);
}
int main()
{
cout << Iterative(4) << endl;
cout << Recursive(4) << endl;
return 0;
}
斐波那契數列
#include <iostream>
using namespace std;
int Iterative(int n)
{
if(n==1||n==0)
return n;
else
return Iterative(n-1)+Iterative(n-2);
}
int Recursive(int n)
{
int now=1,pre=0,pre_now;
while(n>1)
{
pre_now=now;
now=pre+now;
pre=pre_now;
n--;
}
return now;
}
int main()
{
cout << Iterative(6) << endl;
cout << Recursive(6) << endl;
return 0;
}