c++递归计算字符串长度
时间: 2023-11-03 17:57:41 浏览: 102
c 递归计算字符串长度的代码是:
```
int Length(char* str) {
char* t = str;
if (*t == '\0')
return 0;
else {
t = t + 1;
return (Length(t) + 1);
}
}
```
这段代码通过递归的方式计算字符串的长度。首先将字符串指针赋值给临时指针变量t,如果t指向的字符为空字符('\0'),则返回0,否则将t向后移动一位,然后递归调用Length函数,并将结果加1后返回。
相关问题
1.分别用循环结构和递归求字符串S的长度. 函数:int Slen(char*s). c++
好的,以下是用循环结构和递归结构分别求字符串S长度的C++函数:
循环结构:
```cpp
int Slen(char* s) {
int len = 0;
while (*s != '\0') {
len++;
s++;
}
return len;
}
```
这个函数使用了一个while循环,当字符串指针s指向字符串的末尾时,循环结束。在循环过程中,每次将指针s向后移动一位,直到到达字符串的末尾。在每次循环中,将长度len加一,最后返回长度len。
递归结构:
```cpp
int Slen(char* s) {
if (s == '\0') { // 如果指针s指向空字符串,返回0
return 0;
} else {
return 1 + Slen(s + 1); // 否则返回当前字符的ASCII码值加上下一个字符的长度
}
}
```
这个函数也使用了一个if语句来检查指针s是否指向空字符串。如果是空字符串,函数返回0。否则,它将当前字符的ASCII码值加上下一个字符的长度,并递归调用自身来计算下一个字符的长度。递归调用将指针s向后移动一位,直到到达字符串的末尾。最后返回递归调用的结果。
这两个函数都可以用来求字符串S的长度,但递归结构通常比循环结构更简洁和高效,特别是当字符串较短时。不过对于较大的字符串,循环结构可能更适合实现。
利用递归算法求解两个字符串的最大公共子序列的长度问题C++
在C++中,可以利用动态规划结合递归的思想来解决最大公共子序列(Longest Common Subsequence,LCS)问题。经典的斐波那契编码法或者二维数组dp(Dynamic Programming)方法能够有效地计算这个问题。
下面是基本的递归+记忆化(Memoization)版本的代码:
```cpp
#include <string>
using namespace std;
int lcs(string str1, string str2) {
int m = str1.length();
int n = str2.length();
// 创建一个二维数组来存储已计算的最长公共子序列长度
vector<vector<int>> dp(m + 1, vector<int>(n + 1, 0));
// 递归地填充dp数组
for (int i = 1; i <= m; i++) {
for (int j = 1; j <= n; j++) {
if (str1[i - 1][j - 1] + 1;
} else { // 否则取两者之前的最大值
dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]);
}
}
}
return dp[m][n]; // 返回最终的结果即为最长公共子序列的长度
}
// 示例
int main() {
string str1 = "ABCDGH";
string str2 = "AEDFHR";
cout << "Length of LCS is: " << lcs(str1, str2) << endl;
return 0;
}
```
在这个代码里,`lcs`函数首先初始化一个dp数组,然后通过嵌套循环遍历两个输入字符串。如果当前字符匹配,则在对应位置的dp值加一;如果不匹配,则取左上角和左下角的dp值中的较大者。最后返回dp数组右下角的值作为结果。
阅读全文