递归函数中使用while true
时间: 2023-09-09 17:08:13 浏览: 111
在递归函数中使用`while True`是可能的,但是需要注意一些问题。`while True`表示循环将一直执行,直到遇到`break`语句或者程序异常退出。在递归函数中使用`while True`可能会导致无限递归和栈溢出,因为递归函数将不会停止并占用计算机的所有资源。因此,我们需要在适当的条件下退出递归循环,以避免这种情况的发生。
例如,以下是一个简单的递归函数,使用`while True`来实现一个倒计时功能,直到达到0为止:
```python
def countdown(n):
print(n)
if n == 0:
return
else:
while True:
countdown(n-1)
break
```
在这个例子中,我们使用`while True`来保证`countdown()`函数一直在递归,直到`n`等于0。但是,在递归调用之前,我们需要添加一个`if`语句,以避免无限递归。当`n`等于0时,函数将返回,退出递归循环。
总的来说,虽然在递归函数中使用`while True`可能是合法的,但是需要谨慎使用,以免导致无限递归和栈溢出等问题。
相关问题
编写一个递归函数,传入参数为一颗二叉树和一个值k,如果k出现在树中返回true,否则返回false。相应的写出非递归函数
递归函数:
```
bool findValue(TreeNode* root, int k) {
if (root == NULL) {
return false;
}
if (root->val == k) {
return true;
}
return findValue(root->left, k) || findValue(root->right, k);
}
```
非递归函数:
```
bool findValue(TreeNode* root, int k) {
if (root == NULL) {
return false;
}
stack<TreeNode*> s;
s.push(root);
while (!s.empty()) {
TreeNode* node = s.top();
s.pop();
if (node->val == k) {
return true;
}
if (node->right != NULL) {
s.push(node->right);
}
if (node->left != NULL) {
s.push(node->left);
}
}
return false;
}
```
用非递归函数和递归函数实现回文数的判定方法
首先,回文数是指从左到右和从右到左读取都相同的数字。
实现回文数的判定方法,可以分别使用非递归函数和递归函数。
非递归函数实现:
```python
def is_palindrome_iter(num):
num_str = str(num)
left, right = 0, len(num_str)-1
while left < right:
if num_str[left] != num_str[right]:
return False
left += 1
right -= 1
return True
```
递归函数实现:
```python
def is_palindrome_recur(num):
num_str = str(num)
if len(num_str) <= 1:
return True
if num_str[0] != num_str[-1]:
return False
return is_palindrome_recur(num_str[1:-1])
```
这两个函数的实现方式略有不同,但基本思路都是将数字转换为字符串,然后从左右两端开始比较,判断是否相同。其中,非递归函数使用了while循环来实现,而递归函数则使用了函数的递归调用。
阅读全文