作者amamoimi (佛仔)
看板C_and_CPP
标题[问题] 递回函数的变数储存
时间Mon Sep 25 09:01:12 2023
不好意思又是我c++新手
想问一个问题
举个例子
#include<iostream>
using namespace std;
void f(int);
int main(){
f(2);
return 0;}
void f(int x){
int a=1;
int b=2;
if (x==1)
cout<<a<<b;
if(x==2){
a=2;
b=1;
f(1);}
}
印出来结果会使用变数a=1,b=2
我在想有没有办法能够让递回函数每次都使用新设定的变数呢(就我要用f(2)重新指派的变
数a=2 b=1来印出ab)
我想过用static变数(只有第二次有用,剩下都还是没用xd)、 参照
不过好像都没搞头
ps.主要是我在练习河内塔问题的时候,一般解答都是用四个变数的函数
但是如果能够解决上述问题的话是不是能用一个变数解决呢~
谢谢!
----
Sent from
BePTT on my OPPO CPH1943
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 112.78.66.70 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1695603674.A.133.html
※ 编辑: amamoimi (112.78.66.70 台湾), 09/25/2023 09:21:36
※ 编辑: amamoimi (112.78.66.70 台湾), 09/25/2023 09:51:50
1F:推 lwecloud: 把变数a,b传进去;包成class用member variable09/25 10:11
愿闻其详
※ 编辑: amamoimi (112.78.66.70 台湾), 09/25/2023 12:09:27
2F:推 lc85301: 你可以想 x 就是一个你可以设定的东西09/25 13:16
3F:→ lc85301: 所以你可以把 f 改成 f(int x, int a, int b)09/25 13:16
4F:→ lc85301: 但这样太长了,可以包 strcut 当参数来传09/25 13:17
5F:→ amamoimi: 所以还是得设多变数才行罗?09/25 17:08
6F:推 wulouise: 你要render河内塔的图案还是想做什麽? context比较重要09/25 18:21
7F:推 sarafciel: n只代表搬动的盘子数而已,你想缩减到剩下n,那就会los09/25 22:00
8F:→ sarafciel: e掉哪里搬到哪里的资讯,自然就变成解不出来河内塔了09/25 22:00
9F:→ amamoimi: 我想说如果能在函数里定义a柱b柱c柱,每次盘子增加时呼09/26 08:16
10F:→ amamoimi: 叫f(x-1)能直接让f(x-1)的b柱跟c柱调换这样感觉写起来09/26 08:16
11F:→ amamoimi: 比较直观09/26 08:16
12F:→ amamoimi: 不过这也只是我初步想法~确切要怎麽写我也还没有头绪09/26 08:17
13F:推 LPH66: 最简单的就是告诉函数"你的a柱是谁,b柱是谁,c柱是谁"09/26 15:34
14F:→ LPH66: 而这就只是简单地把参数传进去而已09/26 15:35
15F:→ LPH66: 递回的时候会出现"我的a柱是子问题的b柱"这种事情09/26 15:35
16F:→ LPH66: 那就直接将告诉我是a柱的东西传给子问题的b柱就好09/26 15:36
17F:→ LPH66: (基本上就是二楼提的,要不要包struct随你)09/26 15:36
了解!
18F:→ xanxus27: 感觉 如果不是f(int x, int a, int b)的话09/26 16:07
19F:→ xanxus27: 有一些思路09/26 16:07
20F:→ xanxus27: x用2位数 4位数来表示 ex. x = a*10 + b 个位数是b09/26 16:17
21F:→ xanxus27: 十位数是a 这样只要适当用/跟%应该也能操控09/26 16:17
22F:→ xanxus27: 直接用阵列 x = [a, b, x]09/26 16:18
请问用阵列的话要怎麽写好呢
※ 编辑: amamoimi (112.78.66.70 台湾), 09/26/2023 17:23:19
23F:推 wulouise: 每根都是std::stack然後 void(stack& from, stack& to)09/26 22:10
24F:→ wulouise: 这样就够了吧?09/26 22:10
25F:→ wulouise: 不过stack要看内容比较麻烦,你可以用vector的push_back09/26 22:11
26F:→ wulouise: pop_back就好09/26 22:11
27F:→ amamoimi: 我是希望函数可以只用「总共几个几个盘子」当变数这样0
9/27 21:42
※ 编辑: amamoimi (1.200.27.202 台湾), 09/27/2023 21:43:20
28F:→ amamoimi: 毕竟河内塔就是只要你指定盘子的数目,所有的步骤都是决09/27 21:48
29F:→ amamoimi: 定好的呀~09/27 21:48
31F:→ amamoimi: ...好吧xd我被你说服了 谢谢~09/29 07:42
※ 编辑: amamoimi (1.200.3.16 台湾), 09/29/2023 07:44:16
※ 编辑: amamoimi (1.200.3.16 台湾), 09/29/2023 07:45:01
32F:推 closer76: 当你使用递回时,要思考的应该是「如何把所有会变动的资 09/30 10:59
33F:→ closer76: 料都用参数传递」,而非「使用静态/全域变数减少参数」 09/30 11:00
34F:→ closer76: 递回有一点像是让电脑帮你计算函式要呼叫几次、顺序为何 09/30 11:03
35F:→ closer76: 这个函式应该要尽可能是「纯函数」,才能保证执行结果 09/30 11:04
36F:→ amamoimi: 了解 谢谢前辈! 10/02 10:13