1.斐波那契数
什么是斐波那契数?
指的是这样一个数列:1、1、2、3、5、8、13、21、34、……
它从第3项开始,是前2个项的和。
根据这个思路,计算就可以是 An = An-1 + An - 2
int Fibonacci(int fib) { if (fib == 1 || fib == 2) return 1; else return(Fibonacci(fib - 1) + Fibonacci(fib - 2)); } int main() { int i; scanf("%d",&i); int Fib = Fibonacci(i); printf("%d",Fib); return 0; }
但是,运用递归实现斐波那契数时,计算过于复杂,时间耗时长
所以非递归的方法会更好,如下
2.汉诺塔
什么是汉诺塔?
图源网络
这个gif图展示了什么是汉诺塔;想必大家不会陌生
一开始,我们思考2层汉诺塔该怎么移动需要几步,就可以完成思路
ABC代表三根棒子。
void Hanoi(int i,char A ,char B ,char C) { if (i == 1) { printf("%c-->%c\n",A,C); } else { Hanoi(i - 1, A, C, B); printf("%c-->%c\n",A,C); Hanoi(i - 1, B, A, C); } } int main() { int i = 0; scanf("%d",&i);//塔数 printf("完成%d层的汉诺塔需要%d步\n",i, ((int)pow(2, i) - 1)); Hanoi(i,'A','B','C'); return 0; }
3.青蛙跳台阶
一只青蛙可以一次跳 1 级台阶或一次跳 2 级台阶,例如:跳上第一级台阶只有一种跳法:直接跳 1 级即可。跳上两级台阶,有两种跳法: 每次跳 1 级,跳两次; 或者一次跳 2 级.问要跳上第 n 级台阶有多少种跳法?
int frog(int n) { if (n == 1) { return 1; } if (n == 2) { return 2; } return frog(n - 1) + frog(n - 2); } int main() { int n; scanf("%d", &n); int ways = frog(n); printf("%d\n", ways); return 0; }