(1)一只青蛙一次可以跳上 1 级台阶,也可以跳上2 级。求该青蛙跳上一个n 级的台阶总共有多少种跳法。
分析:1)当n = 1, 只有1中跳法;当n = 2时,有两种跳法;当n = 3 时,有3种跳法;当n = 4时,有5种跳法;当n = 5时,有8种跳法;.......
规律类似于Fibonacci数列
大家可以通过递归的方式来理解。
#define _CRT_SECURE_NO_WARNINGS #include//青蛙有两种跳法; //跳一个台阶; //跳两个台阶 int Jump(int n) { if (n <= 0) { printf("台阶数有误请重新输入"); return -1; //当台阶为负数时返回-1 } if (1 == n) { return 1; } else if (2 == n){ return 2; } else { return Jump(n - 1) + Jump(n - 2); //跳一个台阶 //跳两个台阶 } } int main() { //青蛙跳台阶 int n = 0;//设有n个台阶; scanf("%d", &n); Jump(n); printf("%d", Jump(n)); return 0; }
下面来一个比较简单的C语言递归代码
#define _CRT_SECURE_NO_WARNINGS #includeint Fac(int n) { if (n <= 1 ) { return 1; } else { return n * Fac( n - 1 ); //函数阶乘的递归使用方式 } } int Fib(int k){ if (K<=2) return 1; else { return Fib(k-1) + Fib(k-2); //缺点:重复计算效率低下。递归方式行不通要考虑迭代。 } } int Fib(i)nt k) { int a = 1; int b = 1; int c = 0; while (k > 2) { c = a + b; a = b; b = c; k--; } return c; //斐波那契数列的迭代方式 } int main() { //函数自己调用自己 int i = 0 ; scanf("%d", &i); //Fac(i); Fib(i); printf("%dn", Fac(i)); printf("%d", Fib(i)); }