台阶问题
上台阶问题可以利用递归完成计算。
那么什么是递归, 递归就是一种调用自身的编程技巧,并且在这个过程中,
有两点是需要注意的
1.递归的时候必须在函数当中设定一个限制,防止这个函数无限递归下去。
2.递归的时候,每次调用递归都会改变一个关键变量,这个关键变量会向着限制靠拢,当达到这个限制的时候,这个递归就会停止下来。
那么现在用一个台阶问题的例子来理解递归
问题:小乐乐上课需要走n阶台阶,因为他腿比较长,所以每次可以选择走一阶
或者走两阶,那么他一共有多少种走法?
思路
逆向思维
我们假设n阶台阶有fib(n)种方法
1.当乐乐上了n-1阶时
乐乐还差一步就上去了,那就只剩下一种方法。fib(1)
2.当乐乐上了n-2阶时
乐乐还差两步上去,那就剩下两种方法,两次上一阶或者一次上两阶。fib(2)
当乐乐上了n-3阶时
3.乐乐还差3步上去,
那就乐乐可以选择走一阶,还剩两阶楼梯, fib(2)
或者走两阶还剩一阶楼梯。 fib(1)
那么乐乐差三阶楼梯时剩余方法应该是fib(3) = fib(2)+fib(1)=3
4.同理,当乐乐还差n阶台阶时,它的方法有fib(n) = fib(n-1)+fib(n-2) =
fib(n-2)+fib(n-3) + fib(n-3)+fib(n-4)
接着,fib又会接着调用,直到fib(1)和fib(2)出现。
代码
#include <stdio.h>
int fib(n)
{
if (n == 1)//限制条件
return 1;
else if (n == 2)//限制条件
return 2;
else
return fib(n - 1) + fib(n - 2);//关键变量n的变化
}
int main()
{
int n = 0;
scanf("%d", &n);
int sum = fib(n);
printf("%d", sum);
return 0;
}
欢迎指出错误(^ _^)