[问题] array 长度

楼主: kasey ( )   2017-07-17 14:07:21
大家好,我初学Java没多久,最近遇到一个问题。假设有一个 array 里面的数字不重复
,任意给定一个数字,在不用循环的情形下要怎么算此 array 的长度呢?我目前是想到
用 recursion ,可是我写的结果都没有成功 orz,麻烦各位大大解惑
用循环的程式如下:
int length(int [] s, int x)
int l;
int y = x;
while (true) {
if (s[x] == y) {
return l;
}
x = s[x];
++l;
}
}
作者: ssccg (23)   2017-07-17 14:13:00
array.length?你要算的长度到底是什么东西
楼主: kasey ( )   2017-07-17 14:17:00
就是array.length 但是不能用array.length()也不能用循环...
作者: ssccg (23)   2017-07-17 14:25:00
array的长度跟array的内容有关系? 你这是解题目的话至少完整描述题目吧... 不然为什么不用array.length
作者: s06i06 (三条鱼)   2017-07-17 14:29:00
没看懂题目在说什么 算长度参数传一个x干嘛
楼主: kasey ( )   2017-07-17 14:32:00
测试用的 array s 里的元素是不重复的数字。如果长度是6,则数字是0~5任意排列。
作者: ssccg (23)   2017-07-17 14:39:00
所以要求的是array内容的最大值? 另外你说不能用循环那你的while是?
楼主: kasey ( )   2017-07-17 14:43:00
要求的是 array 的长度,int x 是一开始先丢一个任意0~5的数字进去。while 是题目给的示范,但是有另外要求不能用循环写但是函式还是 int length(int [] s, int x),只是内容不能用循环
作者: ssccg (23)   2017-07-17 14:51:00
我觉得题目看起来是求存在array里的circular linked list长度,不是array的长度,x代表的是这个list的head pointer
楼主: kasey ( )   2017-07-17 15:07:00
唔... 这么一说感觉有点像。那如果从他给的示范改成递回的形式,该怎么改好呢?
作者: ssccg (23)   2017-07-17 15:56:00
int len(int[] s, int x, int y) {return s[x] == y ? 1 : 1 + len(s, s[x], y); }length内容为 return len(s, x, x)要跟你的版本一样的话条件成立时要return 0,不过我觉得 1的结果才合理,这题目head不会是null所以至少一个node
楼主: kasey ( )   2017-07-18 01:28:00
谢谢。可是有办法用 int len(int[] s, int x) 写吗?我目前依他的条件找不到好方法存第一个 x 去比较
作者: Schaos   2017-07-18 02:01:00
你可以在递回前留一份啊,题目没限制变量数量。
楼主: kasey ( )   2017-07-18 02:14:00
变量只能写在length()里,可是都会被update... 不太晓得该怎么留
作者: ssccg (23)   2017-07-18 10:15:00
一定需要的东西想办法塞进参数里,需要记下来的放在localvariable其实题目 ONLY AFTER ... 那句是很大的提示了

Links booklink

Contact Us: admin [ a t ] ucptt.com