有时它很简单(如果自调用是最后一个语句,它是尾递归),但仍有一些案例让我感到困惑.一位教授告诉我"如果在自我调用之后没有执行指令,那就是尾递归".这些例子怎么样(忽略它们没有多大意义的事实):
a)这个应该是尾递归的,看看自调用是最后一个语句,并且在它之后没有任何东西可以执行.
function foo(n)
{
if(n == 0)
return 0;
else
return foo(n-2);
}
Run Code Online (Sandbox Code Playgroud)
b)但是这个怎么样?它应该是一个尾调用,因为如果条件为真,除了它之外什么都不会执行,但它不是最后一个语句?
function foo(n)
{
if(n != 0)
return foo(n-2);
else
return 0;
}
Run Code Online (Sandbox Code Playgroud)
c)这个怎么样?在这两种情况下,自我调用将是最后执行的事情:
function foo(n)
{
if(n == 0)
return 0;
else
{
if(n > 100)
return foo(n - 2);
else
return foo(n - 1);
}
}
Run Code Online (Sandbox Code Playgroud) 您可能会问,为什么我要这样做 - 这是因为我正在使用一个类(来自外部库),它在静态初始化程序中执行操作,我需要知道它是否已经完成.
我看了看ClassLoader,但没有找到任何看起来有用的东西.有任何想法吗?
我知道下面的脚本会打印出以' - '(2个破折号)分隔的行,但是如果有很多' - '(短划线),我怎么能用呢?
{
local $/ = "--\n";
while (<>) {
chomp;
print;
}
}
Run Code Online (Sandbox Code Playgroud) 我们怎么能用番石榴做到这一点?请注意List<K>返回类型中存在,因为许多键可以映射到任何法线贴图中的相同值.
public static <K, V> Map<V, List<K>> inverse(Map<K, V> map){
Map<V, List<K>> result = new LinkedHashMap<V, List<K>>();
for (Map.Entry<K, V> entry : map.entrySet()) {
if(!result.containsKey(entry.getValue())){
result.put(entry.getValue(), new ArrayList<K>());
}
result.get(entry.getValue()).add(entry.getKey());
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
BiMap 似乎坚持价值观的独特性,但我没有这种奢侈.
我目前正在开发一个项目,我需要访问相机内置版本(软件将在平板电脑上运行),流式传输相机显示的内容,并允许用户从流中拍摄照片.我有一个版本,我想在我的笔记本电脑上完成它的内置摄像头工作.主要的区别是笔记本电脑使用的是Windows XP平板电脑使用的是Windows 7.
在平板电脑上运行该软件我得到一个例外(通过一些研究,似乎异常是由没有找到WIA设备引起的).内置摄像头可能不兼容WIA吗?设备确实在设备管理器中显示为USB摄像头设备,但与笔记本电脑上的摄像头不同,我无法直接访问它.我必须使用平板电脑制造商投入的第三方软件才能让相机工作.
有没有人遇到类似的问题?我不得不相信,如果平板电脑制造商能够做我需要的东西,我应该能够做类似的事情.
Windows Portable Device API也可以访问摄像头,但似乎是用c ++编写的,没有.NET包装器.有谁知道一个简单的教程,我怎么能让.NET放好呢?编辑:刚试过WPD也没有列出任何设备.我开始认为这台相机不存在.
任何知识/指向资源将不胜感激.(到目前为止谷歌已经出现了同样的几篇文章,无论我采用哪种方式解决问题)
我在应用程序上有一个RichTextBox控件,这就是我的问题:当应用程序运行时,如果我开始用鼠标选择一个单词中的一些字符并继续在它外面选择,则选择会自动包含我开始选择的整个单词如果我没有弄错的话,我想从中选择一个部分的任何其他单词,ms word-ish.
例如:
问题在于鼠标选择,如果我用键盘选择文本就可以了.此外,控件的自动字选择属性被关闭.知道为什么会这样吗?
有没有办法只运行一段JavaScript代码ONCE,而不使用布尔标志变量来记住它是否已经运行过?
特别是不是这样的:
var alreadyRan = false;
function runOnce() {
if (alreadyRan) {
return;
}
alreadyRan = true;
/* do stuff here */
}
Run Code Online (Sandbox Code Playgroud)
我将有很多这些类型的功能,并保持所有布尔将是凌乱的......
我正在寻找一种方法来测试php/mysqli连接的连接部分.我正在从Vista上的LAMP服务器迁移到Ubuntu上的相同,并且正在使mysqli工作.我知道所有正确的模块都已安装,PhpMyAdmin可以完美运行.我已经迁移了一个站点,并没有mysqli连接正常工作.我得到的错误是"在非对象上调用成员函数xxx()",当查询本身错误或查询是从错误的连接准备时,通常会弹出.我知道查询本身是好的,因为它在具有完全相同的数据库结构和数据的其他服务器上工作正常.这让我有了联系.我试着编写一个非常简单的测试连接并将其放在一个循环中,例如..
if(***connection here ***)
{ echo "connected"; }
else
{ echo "not connected"; }
Run Code Online (Sandbox Code Playgroud)
它呼应"连接",这很棒.但只是为了检查我在连接中更改了密码,以便我知道它无法连接,它仍然回显"已连接".所以,if/else测试显然不是要走的路....
当我在开发模式下启动rails服务器时,我想要始终保持瘦身.
默认情况下,webrick使用.所以我在我的Gemfile中添加了thin
gem 'thin', :group => 'development'
Run Code Online (Sandbox Code Playgroud)
现在如果我想用它在开发模式下启动我的服务器,我必须定义它.
bundle exec rails s thin
Run Code Online (Sandbox Code Playgroud)
如果我没有定义它,它总是使用webrick.那么如何定义默认使用thin?
我想对使用反引号的我的Perl程序进行单元测试.有没有办法模拟反引号,以便他们可以做一些与执行外部命令不同的东西?
另一个问题显示了我需要的东西,但是在Ruby中.不幸的是,我不能选择在这个项目中使用Ruby,也不想避免反引号.
java ×2
perl ×2
.net-2.0 ×1
algorithm ×1
backticks ×1
c# ×1
classloader ×1
collections ×1
controls ×1
guava ×1
javascript ×1
mysqli ×1
optimization ×1
php ×1
qx ×1
recursion ×1
tail-call ×1
ubuntu ×1
unit-testing ×1
wia ×1