sheet
| 斐波那契 | 解决思路 |
|---|---|
| 递归解法 | 首先判断终结的方式,就是等于 1 或者 等于2 的时候就返回一,否则返回 f(1) +f(2) |
| 非递归解法 | 同上,首先判断终结条件,然后构建三个变量,首先 result = v1 + v2, 然后 v1 = v2 , v2 = relust 就是一路推,首先 v1 推到 v2 的位置,也就是更新了 |
| 上台阶 | 上台阶问题,就是 菲薄那切的 变种,12台阶可以直接用,别的就是递归多次而已 |
话不多说,直接上代码:
package com.xpj.algo
/*
* 上台阶问题,每次都可以上一个或者两个台阶,这个就是斐波那契 数列,如果是每次一到 3 那么就
* 是 f(4) = f(3) + f(2) + f(1)
* */
// 使用递归解决菲薄那切数列
fun feb1(value: Int) : Int{
if (value <= 0 || value == 1 || value == 2) {
return 1
}
return feb1(value - 1) + feb1(value - 2)
}
fun feb2(value:Int) :Int {
if (value <= 0 || value == 1 || value == 2) {
return 1
}
var v1 = 1
var v2 = 1
var result = 0
// 注意这里需要用 .. 去完成前后都是 闭区间的效果
for (i in 3 .. value) {
result = v1 + v2
v1 = v2
v2 = result
}
return result
}