題目:
?
解釋:題目的意思就是用迭代法的空間和時間復雜的太高了,需要我們減小空間與時間的復雜度,我就想到了迭代法,思路和代碼如下:
#include <stdio.h>
//這里是遞歸法轉迭代法
int main()
{int x,i;scanf("%d",&x);long long a[x+1];//創建一個范圍較大的數組,為避免溢出,多+1for(i=0;i<x+1;i++){if(i<3){a[i]=i;//如:i=0,a[0]=0;a[1]=1;a[2]=2;//數組下標等于數值}else{a[i]=a[i-3]+2*a[i-2]+3*a[i-1]//如:輸入3,就是a[3]=a[0]+2*a[1]+3*a[2]} // 輸入4,就是a[1]+2*a[2]+3*a[3]// 以此類推,因為大于等于a[3]的數組的已經有值了,不會創建新的空間,所以空間復雜度小} // 且不會像遞歸那樣,重復計算例如a[3],a[4]的次數,這樣迭代法的時間復雜度和空間復雜的都比較小printf("%lld",a[x]);
}
?