关于一道算法题
发布于 6 年前 作者 linkenliu 2874 次浏览 来自 问答

等级 经验 Lv 2 - 100 Lv 3 - 200 Lv 4 - 300 Lv 5 - 500 Lv 6 - 800 ? - 2000

有大佬解答一下么

13 回复

发的范德萨发的

斐波那契数列,前两个相加等于后一个

经验值等于前两个值的和,像斐波那契数列,网上有很多。

@LeoChowChina 规则是这样的,看一下就知道2数向加得到需要的值,但实际程序中只有1一个数值。比如说这个值是2000(经验) 根据应验反推出等级

有个稍微蠢的方法; 先写好 等级lv 求出 经验exp 的递归函数fn, 然后循环 调用fn 判断exp大小 return 循环下标 初始循环的n 可大致估算下,测试了一下 是可以的

@SirSong 先写好等级??? 这个不太妥吧。 本身是根据经验推算出等级的,然而等级却先有了。

@linkenliu 是有点蠢,不过却是 可行。 level和exp的规则是固定的,根据这个来确定 只是出发点是level了 所以蠢了点 function fle(n) { if(n === 1) return 0; if(n === 2) return 100; if(n >= 3) { const tmp = n - 2 > 1 ? n - 2 : 2; return fle(n-1) + fle(tmp); } }; function getLevel (exp){ let len = Math.floor(exp / 100); for (let n = 0; n < len; n++) { const pExp = fle(n + 1); const nExp = fle(n + 2); if(exp < nExp && exp >= pExp) { return n + 1; break; }; console.log(n) } };

function get_exp(level){ if(level == 2){ return 100; } if(level == 3){ return 200; } if(level > 3){ return get_exp(level-2)+get_exp(level-1); } }

	function get_level(exp){
		var level = 2;
		while(get_exp(level) <= exp){
			level++;
		}
		return level;
	}

@linkenliu 反推数列是不完全递归

回到顶部