- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在研究一些介绍性的递归问题,我有一个需要澄清的问题希望得到解答。我最烦心的问题是这个递归如何在下面解决的问题中运行?
尽管解决了问题,但我只是不明白递归调用是如何进入字符串内部的。从代码来看,似乎这种方法只会检查给定字符串两端的两个字符,而不会检查其余部分。我的教科书给出了一个非常令人不满意的答案,基本上,只要您的 return 语句改进了问题,就不必担心递归的工作原理。但是,如果不了解如何以跟踪循环的方式跟踪递归方法,我就很难知道如何处理后续递归问题。
任何智慧的话将不胜感激。
谢谢!
public class isPalindrome {
public static boolean isPalindrome(String str)
{
//test for end of recursion
if(str.length() < 2) {return true;}
//check first and last character for equality
if(str.charAt(0) != str.charAt(str.length() - 1)){return false;}
//recursion call
return isPalindrome(str.substring(1, str.length() - 1));
}
public static void main(String[] args)
{
System.out.print(isPalindrome("deed"));
}
}
最佳答案
isPalindrome() 函数在 str.substring(1, str.length() -1) 上被递归调用。所以 isPalindrome() 调用的调用堆栈看起来像这样:
1. isPalindrome("abcddcba"):
("a" == "a") = true, so recurse
2. isPalindrome("bcddcb"):
("b" == "b") = true, so recurse
3. isPalindrome("cddc"):
("c" == "c") = true, so recurse
4. isPalindrome("dd"):
("d" == "d") = true, so recurse
6. isPalindrome(""):
length < 2, so return true
最后一次调用的返回值将一直传播到顶部。
对于递归,图片总是有帮助的。尽最大努力将调用堆栈画成图表。它将允许您可视化,从而更好地理解更复杂的递归。这是一个简单的“线性”递归,但您最终会遇到类似“树”的递归。
这里有一张图片可以说明这个确切的问题,以便您更好地形象化:
关于java - 递归 isPalindrome 函数如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9107485/
这是学校的家庭作业实验室。我正在尝试反转 LinkedList,并检查它是否是回文(前后相同)。我在网上看到了类似的问题,但对我有帮助的并不多。我以前编写过检查回文的程序,但没有编写过检查数组或列表的
已关闭。这个问题是 not reproducible or was caused by typos 。目前不接受答案。 这个问题是由拼写错误或无法再重现的问题引起的。虽然类似的问题可能是 on-top
我正在编写一个函数来检查字符串是否是回文。例如aba,abba,a ba,a ba,一 jar 金枪鱼的坚果。Abba 不是回文,“”(奇数空格)和“”(双倍空格)也不是。 int is_palind
这是我的 isPalindrome 方法 public static boolean isPalindrome(String s){ for(int i = 0; i < s.length()
我正在研究一些介绍性的递归问题,我有一个需要澄清的问题希望得到解答。我最烦心的问题是这个递归如何在下面解决的问题中运行? 尽管解决了问题,但我只是不明白递归调用是如何进入字符串内部的。从代码来看,似乎
我有这个方法,isPalindrome(),我正在尝试找出它的时间复杂度,并更有效地重写代码。 boolean isPalindrome(String s) { boolean bP = tr
wiki.haskell.org 上的 99 个 Haskell 问题中的第 6 个提供了一种单子(monad)方法来测试列表(类型为 [a] )是否为回文: isPalindromeM :: (Eq
我正在用 C 编写一些有用的函数。其中之一是 isPalindrome()。 我想判断一个数是不是回文,我应该... 获取数组中的所有数字 遍历两个索引 - 一个从 0 开始,一个从数组计数开始 递增
我试图编写一个程序来检查列表是否是回文并返回 Bool。 isPalindrome :: [a] -> Bool isPalindrome [] = True isPalindrome [x] = T
我想知道如何修改以下方法以在检查字符串是否为回文时忽略某个字母并将其作为通配符... 示例:“wows”,在这种情况下该方法应返回 false,但是 "pat",“t”可以是通配符(视为 p),因此返
我正在编写一个程序,其中包含一个测试单词是否为回文的函数。编译器不会提示,程序也会运行,但不管输入什么字。有人能告诉我这是为什么吗?我什至从我正在使用的书中复制了 isPalindrome 函数。我不
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 8 年前。 Improve
我是一名优秀的程序员,十分优秀!