遞歸與迭代
求n的階乘。(不考慮溢出)
int Fac1(int n)
{int i=0;int ret=1;for(i=1;i<=n;i++){ret*=i;}return ret;
}
int main(){//求n的階乘int n=0;int ret=0;scanf("%d",&n);ret=Fac1(n);printf("%d\n",ret);return 0;
}
int Fac2(int n)
{if(n<=1)return 1;elsereturn n*Fac2(n-1);
}
int main(){//求n的階乘int n=0;int ret=0;scanf("%d",&n);ret=Fac2(n);printf("%d\n",ret);return 0;
}
斐波那契數列
?1 1 2 3 5 8 13 21 34 55 ......
//
int count=0;int Fib(int n){if(n==3)//從第三個開始計算多少個數{count++;}if(n<=2){return 1;}else return Fib(n-1)+Fib(n-2);
}
int main()
{int n=0;int ret=0;scanf("%d",&n);//TDD -測試驅動開發ret=Fib(n);printf("ret=%d\n",ret);printf("count=%d\n",count);return 0;
}
算出第46個數字需要計算7億次,多磨夸張吧
int Fib(int n){
?? ?int a=1;
?? ?int b=1;
?? ?int c=1;
?? ?while(n>2){
?? ??? ?c=a+b;
?? ??? ?a=b;
?? ??? ?b=c;
?? ??? ?n--;
?? ?}
?? ?return c;
}
int main(){
?? ?int n=0;
?? ?int ret=0;
?? ?scanf("%d",&n);
?? ?ret =Fib(n);
?? ?printf("ret=%d\n",ret);
?? ?return 0;
}
第50個是負數
void test(int n)
{
?? ?if(n<10000)
?? ?{
?? ??? ?test(n+1);
?? ?}
}
int main()
{test(1);
?? ?return 0;
}
自己研究漢諾塔問題
青蛙跳臺階
n個臺階
1次可以跳1個臺階
1次也可以跳2個臺階
這只青蛙要跳第n個臺階,有多少種跳法。