大于或等于谐波系列输入的最小整数

时间:2015-05-24 19:16:04

标签: matlab function loops for-loop while-loop

我正在解决以下问题:

enter image description here

我意识到我的代码有点偏,但我想创建一个for循环来确定整数x(输入值)是否至少小于或等于谐波系列的总和。 / p>

这是我到目前为止所做的:

 function n =one_per_n(x)
 if x > 10000
     n = -1;
 end
 total = 0;
 i = 0;
 for i = 1:10000
      if x >= total
          n = ceil(total);
      else
          total = (1/i) + total;


  end


  end

我在while循环中添加了我的尝试。我意识到这是错的,但任何帮助都会受到赞赏。

 function n =one_per_n(x)
 if x > 10000
     n = -1;
 end
 total = 0;
 i = 0;
 for i = 1:10000
      while total <= x
          total = (1/i) + total;
  end
  end

n =总计;

2 个答案:

答案 0 :(得分:2)

你不需要使用一些循环:

function n = one_per_n(x)
lim   = min(10000,exp(x));
value = cumsum(1./(1:lim));
n     = find(value >= x,1); 
if isempty(n)
    n = -1;
end

答案 1 :(得分:0)

在这种情况下,while循环是一个更好的选择我认为

function [total, n] = one_per_n(x)
% This is a good initial check, good work
if x > 10000
    n = -1;
    return;
end

% Initialize the variables
total = 0;
n = 0;

% While not finished
while (total < x)
    % Number of terms
    n = n + 1;
    total = total + 1/n;
end

end