递归函数练习
Recursive Function practice
我正在为即将到来的考试学习,学习指南上的一个问题是:
编写一个递归C++函数,将一串数字转换为它所代表的整数。对于例如,"13531"表示整数13531。函数应该返回整数值。
我能够将字符串转换为整数,但在函数递归的基本情况下遇到了问题。如有任何建议或帮助,我们将不胜感激。
基本情况是一个空字符串。
递归的每一步都会将字符串中的一个字符转换为整数。递归步骤在字符串的剩余部分中进行。
作为您自己,如何"按照自己的方式"处理起始字符串?
我的直觉告诉我从"1357"开始我会从"7"开始,离开"135",然后是"5",离开"13",以此类推。你最终会留下什么?一个空字符串!
#include<iostream>
#include<string>
#include<cmath>
using namespace std;
int convert(string x)
{
int c=x[0]-'0';//to get the numeric value of the first char in string
if(x.size()==1)//base case
return c;
//in each time return the char with "x.size()-1" digits of zero and the first digit is for the number
return c*pow(10,x.size()-1)+convert(x.substr(1));
}
int main(){
string x;
getline(cin,x);
cout<<convert(x);
}
"12345"将被返回为no=10000+2000+300+5
不确定您的意思是"边缘情况"还是"基本情况"。
边缘情况应该是不再需要任何递归的情况,因此可以直接计算出来。因此,我认为当"字符串"只有一个数字(return str[0]-'0';
)或有零个数字(return 0;
)时,可能会出现这种情况。零位数的情况可能更为普遍。
如果这个数字可能不是以10为基数的数字,那么它的"基数"就多一点。
您可能需要先测试数字的基数。对于c++11,十进制文字(以10为基数)、八进制文字(以8为基数)和十六进制文字(底座16)被支撑,例如0x123、-0123、-123。你可以根据cpp_teger_literal进行测试。
如果不使用pow
,比如:
#include <iostream>
#include <string>
int str_to_int(const std::string& str)
{
if (str.size() == 0)
return 0; // base case, end recursion
else
return (str[str.size() - 1] - '0') +
10 * str_to_int(str.substr(0, str.size() - 1));
}
int main()
{
std::cout << str_to_int("1234");
}
尾递归版
#include<iostream>
#include<string>
void str2int(const std::string& s, int &result, int n = 0)
{
if (n == s.size())
{
return;
}
result *= 10;
result += s[n] - '0';
return str2int(s, result, n + 1);
}
int main()
{
int n = 0;
str2int("1234", n);
std::cout << n;
}
使用迭代器似乎更优雅,并且具有可以将转换函数应用于子字符串的优点。
#include <string>
#include <stdio.h>
using namespace std;
int str2int(string::const_iterator s, string::const_iterator e)
{
if(s==e) return 0;
--e;
return str2int(s,e)*10+*e-'0';
}
int main()
{
string s="12345";
printf("%dn",str2int(s.begin(),s.end()));
}
相关文章:
- 递归函数计算序列中的平方和(并输出过程)
- 如何在Elixir中调用递归函数并行
- 递归函数有效,但无法记忆
- 为什么我的递归函数按降序打印,然后按升序打印?
- 为什么递归函数的最终输出是 5?
- 有没有办法使用递归函数找到数组中最小值的 INDEX?C++
- 如何将记忆应用于此递归函数?
- 如何从递归函数中完全返回,该函数给出了每个函数结果的累积相加?
- 无穷大而循环时具有递归函数
- 即使没有调用这个递归函数,它是如何工作的?
- 如何使此递归函数从给定的起始位置返回最小的整数?
- 此递归函数的每次迭代的值存储在哪里?
- 可以清除递归函数中的变量吗?
- 如何在递归函数调用中返回当前函数值
- 递归函数 c++ 的复杂性
- 这个递归函数有什么作用?运行时的复杂性是多少?
- 任何人都可以查明我的递归函数中的错误吗?
- 递归函数的返回类型推导
- 返回不停止函数,递归函数问题?(编程练习,动态规划,Levenshtein 回溯)
- 递归函数练习