遞歸就是函數自己調用自己?
求n的階乘
n! = n * (n - 1)!
直到n為1或者0的時候為止
舉個例子
int Fun(int n)
{if (n <= 0){return 1;}else{return n * Fun(n - 1);}
}int main()
{int n = 0;scanf("%d", &n);int ret = Fun(n);printf("%d\n", ret);return 0;
}
?畫圖如下所示
順序打印整數的每一位
void Print(int n)
{if (n > 9)Print(n / 10);printf("%d ", n % 10);
}int main()
{int m = 0;scanf("%d", &m);Print(m);return 0;
}
求第n個斐波那契數
int Fib(int n)
{if (n <= 2)return 1;elsereturn Fib(n - 1) + Fib(n - 2);
}int main()
{int n = 0;scanf("%d", &n);int ret = Fib(n);printf("%d\n", ret);return 0;
}
?
青蛙跳臺階問題
?一只青蛙一次只能跳1級或者2級臺階,問青蛙跳上第n級臺階一共有多少種跳法
int Func(int n)
{if (n == 1)return 1;else if (n == 2)return 2;elsereturn Func(n - 1) + (n - 2);
}int main()
{int m = 0;scanf("%d", &m);int ret = Func(m);printf("%d\n", ret);return 0;
}
?
?
也就是說,一個臺階只能跳一步跳一次,如果有兩步,就有兩種情況,可以跳兩次一步,也可以跳一次兩步?
漢諾塔問題
int count;
void move(char A, char C, int n)
{printf("把第%d個圓盤從%c->%c\n", n, A, C);count++;
}void Hanno(char A, char B, char C, int n)
{if (n == 1){move(A, C, n);}else{//將n-1個圓盤從A柱借助于C柱移動到B柱上Hanno(A, C, B, n - 1);//將A柱子最后一個圓盤移動到C柱上move(A, C, n);//將n-1個圓盤從B柱借助于A柱移動到C柱上Hanno(B, A, C, n - 1);}
}int main()
{int n = 0;printf("輸入A柱子上的圓盤個數:");scanf("%d", &n);//將n個圓盤從A柱借助于B柱移動到C柱上Hanno('A', 'B', 'C', n);printf("一共移動了%d次圓盤", count);return 0;
}
有A,B,C三個桿子,要將A上面的按順序移到C上面,并且只能大的在下,小的在上
?
?