Help with infinite while loop

5 次查看(过去 30 天)
Devan
Devan 2012-11-24
I need to create a simple script that take a number, checks if it odd or even. If it's even: divide by two, if it's odd: multiply by 3 add 1. The script is supposed to repeat this check and calculation until the output reaches a value of one. I've tried the following while loop which calculates the first value but then infinity spits out this same value. Thanks in advance!
clear
disp('Please input student number')
ID = input('SI#: ');
if mod(ID,2) == 0
out = ID/2
else out = ID.*3+1
end
while out > 1
if mod(ID,2) == 0
out = ID/2
else out = ID.*3+1
end
end
  6 个评论
Matt J
Matt J 2012-11-24
OK. Glad I didn't spend my day trying to prove it :)
Jan
Jan 2012-11-25
编辑:Jan 2012-11-25
It is not proved. See http://en.wikipedia.org/wiki/Collatz_conjecture. You can earn 500$ and the Fields medal when you prove it, but this would conflict with the term " algorithmically undecidable".

请先登录,再进行评论。

回答(3 个)

Matt Fig
Matt Fig 2012-11-24
编辑:Matt Fig 2012-11-24
The problem is that ID never changes in your loop so you are just doing the same thing over and over. Change all 'out' variables to 'ID' and your code should work fine.

Devan
Devan 2012-11-24
thanks!

Jan
Jan 2012-11-25
编辑:Jan 2012-11-25
It is a good idea to ask Google, in this case for "3N+1 Wiki". You find explanations, theorems, algorithms and visualizations, ... Enough material to solve the homework.

类别

Help CenterFile Exchange 中查找有关 Call C++ from MATLAB 的更多信息

标签

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by