尝试结合 For 和 If 循环

Trying to combine For and If loop

我看了一个关于 3n + 1 猜想的视频,只是想尝试看看我是否可以创建一个简单的程序来复制它的几个循环。

我想做的是让程序接受一个输入数字,决定它是奇数还是偶数。如果将它除以 2,然后使用该数字继续循环。或者,如果该值是奇数,则将其乘以 3 并加 1,然后继续循环。

即,如果数字是 7,则为奇数,则转到 22,偶数,则转到 11,奇数,则转到 34,偶数,则转到 17,依此类推。

这是我的尝试,我只是想尝试一下,但一无所获。我希望这只是一些我必须处理代码的小事,如果不是我可以离开它。

#Want to do 10 loops of n
#If n is even /2
#if n is odd n*3 +1
n = input("enter first value for n")
for i = (n:10); 
  disp(i)
  if mod(i, 2) == 0
  % i is even
  ans = sprintf("%d", i ," is even")
  newn = (i/2)
  disp(ans)
  else
  % i is odd
  ans = sprintf("%d", i ," is odd")
  disp(ans)
  newn = (3*n +1)
  end
end

编辑:

我在回复代码时遇到了问题,所以这里是更新后的代码,我得到了帮助,它似乎运行良好。我不知道为什么 sprintf 运行得不太好。

n = input("enter first value for n")
for i = 1:10 
  if mod(n, 2) == 0
  % n is even
  n = n/2
  else
  % n is odd
  n = 3*n +1
  end
end

您的代码存在多个问题,包括但不限于正在计算但从未使用过的变量,以及 in 的奇怪组合。

不确定这是否完美,但我认为这应该大致是您想要做的:

#Want to do 10 loops of n
#If n is even /2
#if n is odd n*3 +1
n = 123
for i = (1:10)
  disp(i)
  disp(n)
  if mod(n, 2) == 0
  % n is even
    disp(sprintf("%d%s", n ," is even"))
    n = (n/2);
  else
    % n is odd
    disp(sprintf("%d%s", n ," is odd"))
    n = (3*n +1);
  end
end
clc

n = input('Enter first value for n : ');

number_of_loops = 10;

for i = 1 : number_of_loops
    disp(['Loop # ', num2str(i)]);
    if mod(n, 2) == 0
        disp([num2str(n), ' is even']);
        n = n/2;
    else
        disp([num2str(n), ' is odd']);
        n = 3*n + 1;
    end
    disp(['New number = ', num2str(n)]);
end