用递归返回字符串中元音字母的数目
发布网友
发布时间:2024-10-24 12:51
我来回答
共1个回答
热心网友
时间:2024-11-05 11:12
这个递归思想有问题啊。你这不是递归了。
#include<iostream>
#include<string>
using namespace std;
int func(string str,int i);
int count=0;
int main()
{
string str;
cout<<"please input the string :"<<endl;
cin>>str;
count = func(str,str.length() );
cout<<count <<endl; // 问题出在这,为什么我输出的是地址?
return 0;
}
int func(string str,int i)
{
if(i ==0)
return 0;
if(str[i-1]=='a'||str[i-1]=='e'||str[i-1]=='i'||str[i-1]=='o'||
str[i-1]=='u'||str[i-1]=='A'||str[i-1]=='E'||str[i-1]=='I'||str[i-1]=='O'||str[i-1]=='U')
return 1 + func(str, i-1);
else return func(str, i-1);
}追问嗯,我觉得你说的对。。。但是我明明调用自身了呀
追答递归算法要求:
递归算法所体现的“重复”一般有三个要求:
一是每次调用在规模上都有所缩小(通常是减半);
二是相邻两次重复之间有紧密的联系,前一次要为后一次做准备(通常前一次的输出就作为后一次的输入);
三是在问题的规模极小时必须用直接给出解答而不再进行递归调用,因而每次递归调用都是有条件的(以规模未达到直接解答的大小为条件),无条件递归调用将会成为死循环而不能正常结束。
递归算法都会追溯到最后可以直接给出答案,再依次倒回来得到跟大规模的解。