首页 > 解决方案 > 如何在 Mathematica 中正确实现递归函数?

问题描述

我正在编写一个代码,它根据上一步的值评估步骤 n 的函数。我正在尝试通过递归来解决它。这是一些代码

Clear["Global`*"];

ResourcesToPower[x_] := Log[1.1, x/10 + 1]/Log[1.1, 2]*10;
ProvincePower = ConstantArray[50, 10];
ProvinceResources[p_] := ProvincePower[[p]]*10;

PlayerResources[0] = 50;
PlayerResources[n_] := 
  PlayerResources[n] = 
   PlayerResources[n - 1] + ProvinceResources[PlayerProvince[n - 1]];

PlayerPower[n_] := ResourcesToPower[PlayerResources[n]];
PlayerProvince[0] = 1;
PlayerProvince[n_] := 
  PlayerProvince[n] = 
   If[ResourcesToPower[PlayerResources[n - 1] ] >=  
     ProvincePower[PlayerProvince[n - 1] ], 
    PlayerProvince[n - 1] + 1, PlayerProvince[n - 1]]; 
p = PlayerProvince[3] 

我收到错误:

"表达式 If[25.8496>={50,50,50,50,50,50,50,50,50,50}[1],PlayerProvince[1-1]+1, PlayerProvince[1-1]] 不能用作零件规格"

出于某种原因,Mathematica 不会将表达式扩展为数字。我究竟做错了什么?

标签: wolfram-mathematica

解决方案


在上面最后一行代码中的第三行更改

ProvincePower[PlayerProvince[n - 1]]

ProvincePower[[PlayerProvince[n - 1]]]

因为ProvincePower是数组而不是函数,您需要[[value]]从数组或列表中提取元素。


推荐阅读