本文概述
这个任务是写一个递归函数来替换所有出现在给定字符串中的pi为3.14,并打印修改后的字符串。
例子:
输入:str ="pippppiiiipi"
输出:3.14ppp3.14iii3.14
输入:str ="pip"
输出:3.14p
输入:str ="xpix"
输出:x3.14x
我们在这里讨论了一个迭代函数
方法:
- 如果字符串中只有一个字符或该字符串为空, 则中断递归调用
- 否则, 你自己保留字符串的第一个字符, 然后将字符串的其余部分传递给递归。
- 如果第一个字符不是" p", 则只需将该字符放在递归答案的前面
- 否则, 如果第一个字符为" p"并且传递给递归的零件的第一个字符为" i", 则将" pi"替换为" 3.14"
下面是上述方法的实现:
C ++
//A recursive C++ program to replace
//all pi in a given string with 3.14
#include <bits/stdc++.h>
using namespace std;
//Recursive Function to replace all
//occurrences of pi in a given
//with 3.14
void replacePiHelper( char str[], int start)
{
//Base condition
//if the string is empty
//or of length one
if (str[start] == '\0' || str[start] == '\0' ) {
return ;
}
//Getting the answer from
//recursion for the smaller
//problem
replacePiHelper(str, start + 1);
//Small calculation part
//if the first character is 'p'
//and the first character of the part
//passed to recursion is 'i' then replace
//"pi" with "3.14"
if (str[start] == 'p' && str[start + 1] == 'i' ) {
//Shifting the characeters to
//right side to put 3.14 in
//the character array
for ( int i = strlen (str); i>= start + 2; i--) {
str[i + 2] = str[i];
}
//Replacing with "3.14"
str[start] = '3' ;
str[start + 1] = '.' ;
str[start + 2] = '1' ;
str[start + 3] = '4' ;
}
}
//Function to replace pi with 3.14
void replacePi( char str[])
{
replacePiHelper(str, 0);
}
//Driver code
int main()
{
char str[] = "pippppiiiipi" ;
//Function call
replacePi(str);
cout <<str;
return 0;
}
Java
//A recursive Java program to replace
//all pi in a given string with 3.14
class GFG {
//Recursive Function to replace all
//occurrences of pi in a given
//with 3.14
public String replacePi(String str)
{
//base condition
//if the string is empty
//or of length one
if (str.length() <= 1 ) {
return str;
}
//if the first character is 'p'
//and the first character of the part
//passed to recursion is 'i' then replace
//"pi" with "3.14"
if (str.charAt( 0 ) == 'p' && str.length()>= 2
&& str.charAt( 1 ) == 'i' ) {
return "3.14" + replacePi(str.substring( 2 , str.length()));
}
//if the first character is not 'p'
//then just put that character in
//front of the answer which came
//from recursion
return str.charAt( 0 ) + replacePi(str.substring( 1 , str.length()));
}
//Driver Code
public static void main(String args[])
{
GFG g = new GFG();
String str = "pippppiiiipi" ;
System.out.println(g.replacePi(str));
}
}
Python3
# A recursive Python3 program to replace
# all pi in a given string with 3.14
# Recursive Function to replace all
# occurrences of pi in a given
# with 3.14
def replacePieHelper(string, start):
# Base condition
# if the string is empty
# or of length one
if len (string) <2 or start = = len (string):
return string
# Getting the answer from
# recursion for the smaller
# problem
replacePieHelper(string, start + 1 )
# Small calculation part
# if the first character is 'p'
# and the first character of the part
# passed to recursion is 'i' then replace
# "pi" with "3.14"
if (string[start] = = 'p' and
string[start + 1 ] = = 'i' ):
# Replacing with "3.14"
string[start:start + 2 ] = [ '3' , '.' , '1' , '4' ]
# Function to replace pi with 3.14
def replacePi(string):
replacePieHelper(string, 0 )
# Driver Code
if __name__ = = "__main__" :
string = "pippppiiiipi"
string = list (string)
# Function call
replacePi(string)
string = ''.join(string)
print (string)
# This code is contributed by
# sanjeev2552
C#
//A recursive C# program to replace
//all pi in a given string with 3.14
using System;
class gfg {
//Recursive Function to replace all
//occurrences of pi in a given
//with 3.14
public String replacePi(String str)
{
//base condition
//if the string is empty
//or of length one
if (str.Length <= 1) {
return str;
}
//if the first character is 'p'
//and the first character of the part
//passed to recursion is 'i' then replace
//"pi" with "3.14"
if (str[0] == 'p' && str.Length>= 2
&& str[1] == 'i' ) {
return "3.14" + replacePi(str.Substring(2, str.Length - 2));
}
//if the first character is not 'p'
//then just put that character in
//front of the answer which came
//from recursion
return str[0] + replacePi(str.Substring(1, str.Length - 1));
}
}
//Driver Code
class geek {
public static int Main()
{
gfg g = new gfg();
string input = "pippppiiiipi" ;
Console.WriteLine(g.replacePi(input));
return 0;
}
}
输出如下
3.14ppp3.14iii3.14
另一种方法:
一种简单的递归方法, 用" 3.14"替换给定函数中的所有pi。首先声明函数, 我们不需要任何辅助函数。
- 如果字符串为空或字符串的长度为1, 则返回字符串。
- 如果字符串的第0个元素和第1个元素是p, 并且我们必须处理它们的其余部分, 则必须调用递归, 它将给出结果。
- 如果不是, 那么我们必须从1st调用递归到所有元素, 然后将递归结果添加到1st元素并返回它。
下面是上述方法的实现:
python
# Python program for above approach
# A simple recursive approach
# to replace all
# pi in a given function with "3.14"
# Firstly function is declared we don't
# need any helper function one
# function is enough
def replacePi(string):
# Base case if string is empty
# or length of string is 1
# return the string
if len (string) = = 0 or
len (string) = = 1 :
return string
# If the 0th and 1st element
# of string are p
# and i we have to handle them
# for rest we have to call
# recursion it will give the result
if string[ 0 ] = = 'p' and string[ 1 ] = = 'i' :
# Smalloutput is a variable
# used to store recursion result
smallOutput = replacePi(string[ 2 :])
# And we have to add the recursion
# result with the first part we
#handeled and return the answer
return "3.14" + smallOutput
else :
# If not then we have to call
# recursion from 1st to all elements
# then add recursion result to
# 1st element and return it
smallOutput = replacePi(string[ 1 :])
return string[ 0 ] + smallOutput
# Driver code
if __name__ = = "__main__" :
string = "pipppiiipi"
# Function call
result = replacePi(string)
print result
C#
//C# program for above approach
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
class GFG{
//A simple recursive approach
//to replace all pi in a given
//function with "3.14". Firstly
//function is declared we don't
//need any helper function one
//function is enough
static string replacePi( string s)
{
//Base case if s is empty
//or length of s is 1
//return the s
if (s.Length == 0 || s.Length == 1)
return s;
//If the 0th and 1st element
//of s are p and i we have to
//handle them for rest we have
//to call recursion it will
//give the result
if (s[0] == 'p' && s[1] == 'i' )
{
//Smalloutput is a variable
//used to store recursion result
string smallOutput = replacePi(s.Substring(2));
//And we have to add the recursion
//result with the first part we
//handeled and return the answer
return "3.14" + smallOutput;
}
else
{
//If not then we have to call
//recursion from 1st to all elements
//then add recursion result to
//1st element and return it
string smallOutput = replacePi(s.Substring(1));
return s[0] + smallOutput;
}
}
//Driver Code
public static void Main( string [] args)
{
string s = "pipppiiipi" ;
//Function call
string result = replacePi(s);
Console.Write(result);
}
}
//This code is contributed by rutvik_56
输出如下:
3.14pp3.14ii3.14